繁体   English   中英

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

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

假设我多次使用此函数,并且响应延迟-我会冒着回调冲突的风险吗? 回调是否在全局范围内运行? 我希望并行运行多个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>

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM