2014-09-03 74 views
2

我有一個函數(searchTerm),它應該從兩個URL中同時獲取數據,並在兩個調用完成後顯示結果。無法從並行ajax調用中檢索數據

這是工作正常,當我在.when只有一個參數調用(比如$.ajax(options1)),

但我需要從兩個並行輸出,我在.then調用這兩個網址,並記錄響應數據1和數據2函數,但現在在ajax調用完成後它不會被調用。

任何人都可以告訴我在這種方法中是否正確嗎?如果是這樣,那麼爲什麼回調沒有得到執行?

var searchTerm = function() { 

    var $a = $(this); 
    var term = $("#searchbox").val(); 

    var options1 = { 
     url: "someurl1", 
     contentType: "application/json", 
     data: JSON.stringify({ 
      searchString: term 
     }), 
     type: "post", 
     dataType: "html" 
    }; 

    var options2 = { 
     url: "someurl2", 
     contentType: "application/json", 
     data: JSON.stringify({ 
      searchString: term 
     }), 
     type: "post", 
     dataType: "html" 
    }; 

    $.when($.ajax(options1), $.ajax(options2)).then(function(data1, data2) { 
     alert("callbacks finished"); 
    }); 

信息1:
               似乎任何Ajax調用我指定爲第一個參數與500服務器錯誤而失敗。我嘗試交換options1和options2,現在使用options2的調用失敗。

信息2:
               我所提到的選項1和選項2點在同一個控制器中的操作的方法和一部分的URL,他們都返回(的ActionResult)對象的awaitable任務。這可能是這裏的問題嗎?這些調用是通過異步請求以某種方式阻止/中斷對方的?

信息3:
               試圖提供更多的細節的工作。的動作方法的定義是這樣的 -

public async Task<ActionResult> someurl1(.....){ 
... 
... 
return await View(...); 
} 
+0

可以嘗試.done而不是.then,看看它是否工作? – Sunand 2014-09-03 20:02:38

+0

我確實嘗試過,但沒有任何影響。 – Sam 2014-09-03 20:04:48

+3

你檢查網絡標籤是否都是返回成功的請求? – Sunand 2014-09-03 20:08:38

回答

0

最後,我在調試完所有後續調用後找到答案。我從兩個使用全局變量進行外部URL調用的操作方法調用了一個通用函數。只需使用下面的鎖定機制,使我的關鍵部分線程安全。

public static object Lock = new object(); 

lock (Lock) // added for thread safety purpose 
{ 
    response_task = CallExtern(...) 
} 
-1

嘗試添加選項

async: false 

到AJAX對象。

+1

async:false不適用於承諾對象。 (並且在幾乎所有情況下通常都是一個壞主意)。 – 2014-09-03 22:01:25

+0

另外,我確實希望同時處理這兩個請求,所以async:false不是一個選項。 – Sam 2014-09-03 22:35:25