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>
答案 0 :(得分:0)
回调函数的范围不是global.Callback函数将具有与函数相同的范围。回调函数中声明的变量不能从回调函数外部访问。
在javascript中,范围将在词法时间定义,因此回调函数中的变量将在ajax查询完成之前分配给范围。变量的值仅在ajax查询完成后的执行期间分配。 / p>
当一个函数被多次调用时,每次在javascript中使用相同的变量内存位置,这同样适用于此。但是回调函数的执行将是同步的而不是并行的。并且回调函数执行的顺序将是jquery返回的顺序。因此不会发生冲突。
答案 1 :(得分:0)
是的,GetFeatureCallback
需要是JSONP工作的全局变量。如果同时多次运行getFeature
,则在使用静态名称时会发生冲突。如果您没有传递jsonpCallback
的值,jQuery将在每次调用时自动动态创建一个新的唯一名称。
当服务器实现不当并且没有提供选择回调名称的方法时,并发请求将全部调用相同的函数,而没有任何好的方法来区分它们。如果响应包含足够的信息以将其与查询相关联,那么可能仍然可行,但通常您最好对请求进行排序。