对两个ajax()请求使用相同的回调产生“parsererror”

时间:2011-07-08 16:11:21

标签: javascript jquery json

所以,我一直在与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只能在其上调用一个请求吗?

1 个答案:

答案 0 :(得分:2)

我认为两个AJAX调用引用相同的jsonpCallback并不起作用 - 我认为jQuery在全局命名空间中放置一个回调函数,然后在调用它时删除它 - 所以它不会出现在第二组加载数据中。我不认为将async设置为false会有问题,但看起来确实如此。

起初我无法弄清楚你为什么要设置jsonpCallback,但是测试似乎表明你使用的API会从回调名称中删除[a-z]以外的任何内容:( 。所以你可以试试这个,jsonpCallback在第一次通话时设为'handlejsona',第二次通话设为'handlejsonb'

这种方法似乎适用于此:http://jsfiddle.net/nrabinowitz/H7zYt/