我正在进行跨域JSON(P)调用,使用JavaScript将<script>
标记添加到DOM,并将该网址作为src
包含在内。正在加载的脚本有一个调用我的页面上的函数的回调,我想要的数据作为参数返回给函数。
但有两次捕获:
因此,我需要检测何时未触发回调函数(这表明JSONP文件返回了错误),但我还需要考虑可以请求两次相同文件的事实。本质上,我需要检测加载页面时的错误,但我必须在其他文件完成加载之前执行此操作。是的,文件应该以正确的顺序加载(或返回错误)。
一个(低效)解决方案:
我可以为每个不同的文件加载生成一堆不同的函数(例如callbackFunction0,callbackFunction1等)。这样,我可以简单地确定何时其中一个函数没有触发并让我的JavaScript动作。但是,这将占用大量空间,效率低下,因为我必须在同一页面上加载脚本的最长时间内有一个callbackFunction(这个数字没有确定的值,所以如果我只做了15个函数和脚本被请求了20次,会发生错误。
这很难解释,但希望你明白了。感谢。
答案 0 :(得分:2)
$.ajax有许多可以使用的回调函数。
$.ajax({
url: "test.html?callback=?",
dataType: "jsonp",
success: function(data){
// your logic
}
statusCode: {
404: function() {
alert('page not found');
}
}
});
答案 1 :(得分:1)
你可以在回调函数中添加一个参数,其中包含脚本的id / number / position。所以像callbackFunction(1,......其余的参数......)。无需创建新的函数名称。
您可以通过将onerror事件附加到脚本元素来检测错误。 有点相关:How to trigger script.onerror in Internet Explorer?
答案 2 :(得分:0)
为了解决这个问题,我使回调包含一个包含请求号的变量。所以回调可能是var requestnumber=0;callbackFunction
。然后我可以找出应用于哪个元素的请求。我以前应该想到这个。