比方說,例如,我有一個返回布爾javascript函數如下:
function CallWebServiceToUpdateSessionUser(target, user)
{
var dataText = { "jsonUser": JSON.stringify(user) };
$.ajax({
type: "POST",
url: target,
data: JSON.stringify(dataText),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response)
{
return true;
},
failure: function (msg)
{
return false;
}
});
}
和被稱爲可能需要在服務器上的目標函數以...... 15秒來回應。
如何保證此功能不會退出,直到服務器調用完成?或者,我怎樣才能保證誰曾經調用這個函數會得到真/假而不是未定義的?
NOTE: 我見過人們使用async:false,但掛起了我不想要的UI。
.ajax()默認是異步的,除非將async設置爲false,否則不會掛起瀏覽器。使用控制檯進行調試會向您顯示什麼?順便說一下,你似乎違背了你的自我,要求在函數完成之前不要讓函數退出,但是你說你不想等待。哪一個? – j08691 2012-03-01 16:46:50
您想讓瀏覽器卡住,直到服務器響應,而不掛斷用戶界面。這是一個矛盾。 雖然瀏覽器卡在你的函數中,但它不能處理其他任何東西。 – 2012-03-01 16:47:26
爲什麼你不希望函數退出?這正是你想要發生的事情,以便再次釋放UI線程。您應該彈出一個「加載」消息,然後從服務器收到響應後恢復工作。可能允許用戶取消響應(或至少忽略結果)。 – 2012-03-01 16:48:14