2015-05-15 72 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