所以,我一直在与Javascript争论一段时间,我有一个奇怪的错误,这可能是一件简单的事情。我有一个像这样的ajax请求:
$.ajax({
url: 'http://www.hahaha.com/api/v3/acts',
crossDomain: true,
jsonpCallback: 'handlejson',
async: false,
jsonp: 'callback',
dataType: 'jsonp',
type: 'GET',
success: handleActs,
error: handleError
});
哪个工作正常并且没有问题地调用回调。现在,如果我直接在下面添加此请求:
$.ajax({
url: 'http://www.hahaha.com/api/v3/performances',
crossDomain: true,
async: false,
jsonpCallback: 'handlejson',
jsonp: 'callback',
dataType: 'jsonp',
type: 'GET',
success: handlePerformances,
error: handleError
});
第一次请求时出现“parsererror”,第二次请求成功。任何人都有任何想法,为什么它这样做? jsonpCallback只能在其上调用一个请求吗?
答案 0 :(得分:2)
我认为两个AJAX调用引用相同的jsonpCallback
并不起作用 - 我认为jQuery在全局命名空间中放置一个回调函数,然后在调用它时删除它 - 所以它不会出现在第二组加载数据中。我不认为将async
设置为false
会有问题,但看起来确实如此。
起初我无法弄清楚你为什么要设置jsonpCallback
,但是测试似乎表明你使用的API会从回调名称中删除[a-z]
以外的任何内容:( 。所以你可以试试这个,jsonpCallback
在第一次通话时设为'handlejsona'
,第二次通话设为'handlejsonb'
。
这种方法似乎适用于此:http://jsfiddle.net/nrabinowitz/H7zYt/