我有一个应用程序发出多个jsonp请求,所有请求都使用相同的jsonpCallback,我无法更改它。
我尝试在下面的代码中重现这种情况。
输出有些随机,但它几乎不包括contextvar的所有可能值。
在我看来,jquery全局注册了“myFunc”,并且对于来自requestMaker的每个新请求,都会覆盖此关联。
如何不覆盖上下文,在这种情况下,如何打印所有值?
<script type="text/javascript">
var requestMaker = function(url, contextvar) {
$.ajax({
url: url,
crossDomain: true,
dataType: 'jsonp',
jsonpCallback: "myFunc"
}).done(function(data) {
console.log(contextvar);
});
};
requestMaker("https://www.w3schools.com/js/demo_jsonp.php", "request1");
requestMaker("https://www.w3schools.com/js/demo_jsonp.php", "request2");
requestMaker("https://www.w3schools.com/js/demo_jsonp.php", "request3");
requestMaker("https://www.w3schools.com/js/demo_jsonp.php", "request4")
</script>
1条答案
按热度按时间bxgwgixi1#
是的,回调函数
"myFunc"
似乎占用了全局作用域,因此不能并行运行。下面的代码段连续运行四个jsonp调用,一个接一个。不太理想,但至少您得到了您的结果。一些API提供了一个参数callback
或jsonp
来指定填充回调函数的名称。然而,这里使用的API不提供这样的参数。jsonp
被认为是AJAX请求的"历史"协议,最初于2004年提出,请参见此处:https://en.m.wikipedia.org/wiki/JSONP。它存在一定的安全问题,并于2014年被CORS淘汰。