In what scope is the callback from a JQuery JSONP Ajax request being executed?

时间:2016-09-01 06:13:14

标签: javascript jquery callback jsonp

Say I use this function multiple times and the response is delayed - will I risk the callbacks conflicting? Are callbacks run in global scope? I'm hoping to run multiple Ajax calls in parallel.

<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>

2 个答案:

答案 0 :(得分:0)

回调函数的范围不是global.Callback函数将具有与函数相同的范围。回调函数中声明的变量不能从回调函数外部访问。

在javascript中,范围将在词法时间定义,因此回调函数中的变量将在ajax查询完成之前分配给范围。变量的值仅在ajax查询完成后的执行期间分配。 / p>

当一个函数被多次调用时,每次在javascript中使用相同的变量内存位置,这同样适用于此。但是回调函数的执行将是同步的而不是并行的。并且回调函数执行的顺序将是jquery返回的顺序。因此不会发生冲突。

答案 1 :(得分:0)

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

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