2015-05-15 70 views
-2

我有Node.js服务器和jQuery ajax请求。JSONP Ajax调用不能并行工作

这工作:

api(config.categoriesURL, success, config.err1); 
setTimeout(function() { 
    api(config.randomURL, success1, config.err2); 
},300); 

但这并不:

api(config.categoriesURL, success, config.err1); 
api(config.randomURL, success1, config.err2); 

这里是控制台输出:

url: http://localhost:3000/categories/?callback=myCallback&_=1431726147454 
url: http://localhost:3000/random/?callback=myCallback&category=55564cc42e366b34aa9a529d&callback=myCallback&_=1431726147455 
responseText: undefined 
status: 200 
text status: parsererror 
error: Error: myCallback was not called' 

这是服务器端或客户端问题?任何想法为什么发生这种情况,我应该如何解决它?这是正常的行为吗?

这里是更多的代码:

main.js

$(document).ready(function() { 

    var api = require('./api'), 
    config = require('./config'); 

    function success (data) { 
     data.forEach(function (category) { 
      var div = document.createElement('div'); 
      div.id = category._id; 
      div.textContent = category.name; 
      $('.container').append(div); 
     }); 
    } 

    function success2 (data) { 
     console.log(data); 
    } 

    api(config.categoriesURL, success, config.err1); 
    api(config.randomURL, success2, config.err2); 


}); 

api.js

function api(url, success, error) { 
    $.ajax({ 
     type: 'GET', 
     url: url, 
     beforeSend: function (jqXHR, settings) { 
      console.log('url: ' + settings.url); 
     }, 
     jsonpCallback: 'myCallback', 
     dataType: 'jsonp', 
     success: success, 
     error: error 
    }); 
} 

module.exports = api; 
+1

稍微多一点的代码会很有用,在你调用这些函数之前有些东西是有用的。 – Sidd

+0

@Sidd,我更新了更多的代码。如果您需要更多信息,请告诉我。 – Mika

回答

1

你应该尝试删除:

jsonpCallback: 'myCallback', 

您正在为回调函数使用两个同时使用相同名称的JSONP ajax调用。我会认为这会是一个问题。

如果您删除了jsonpCallback设置,jQuery将随机生成回调函数的名称。

+0

酷!现在,第一个API调用的作品,但第二个给出了相同的parsererror,它说'jQuery21404176367884501815_1431730654390不叫' – Mika

+0

@MikaVäisänen - 解析错误意味着第二个响应是空的.. –

+0

我明白了。我将'myCallback'硬编码到第二个URL。谢谢! – Mika