[英]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.