在哪个范围内执行来自JQuery JSONP Ajax请求的回调?



假设我多次使用这个函数并且响应延迟-我会冒回调冲突的风险吗?回调是否在全局范围内运行?我希望并行运行多个Ajax调用。

<script>
var getFeature = function (id) {
    $.ajax({
      type: 'GET',
      url: "http://myserver.com/feature.aspx",
      data: {id:id},
      jsonpCallback:"GetFeatureCallback",
      contentType: "application/json",
      dataType: 'jsonp'
    }).done(function (data) {
      //do something with data
    });
}
getFeature(1);
getFeature(2);
</script>

是的,GetFeatureCallback需要是JSONP工作的全局变量。如果同时运行getFeature多次,那么在使用静态名称时它们将发生冲突。如果你没有为jsonpCallback传递一个值,jQuery将在每次调用时自动动态创建一个新的唯一名称。

当服务器实现得很糟糕并且没有提供选择回调名称的方法时,并发请求将调用相同的函数,而没有任何好的方法来区分它们。如果响应包含足够的信息以将其与查询关联起来,那么这样做可能仍然是可行的,但通常您最好对请求进行排序。

回调函数的作用域不是全局的。回调函数将具有与函数相同的单独作用域。在回调函数中声明的变量不能从回调函数外部访问。

在javascript中,作用域将在词法时定义,因此回调函数中的变量将在ajax查询完成之前分配给作用域。变量的值只会在ajax查询完成后的执行过程中分配。

当一个函数被多次调用时,javascript中每次都使用相同的变量内存位置,这里也适用。但是回调函数的执行将是同步的,而不是并行的。回调函数执行的顺序将是jquery返回的顺序。所以不会发生碰撞。

最新更新