您正在嘗試使AJAX調用同步的,但你是一個做的異步調用。
重要的是要明白,你寫的方式,代碼不會等待AJAX調用完成,然後再轉到下一行。因此,它始終返回初始值ret
。
做幾件事情來解決這個問題:
應該是這個樣子:
function foo()
var ret = $.ajax({ url: "blah",
async: false
}).responseText;
// do your stuff here
return ret;
}
編輯:這是可能的異步調用做到這一點,但你要調整你思考問題的方式。不要考慮返回值,你必須考慮回調函數。
爲了舉例,我們可以說我試圖獲取用戶名並將其放在頁面上。我的代碼看起來是這樣的:
function GetUsername() {
$.ajax({ url: "blah",
success: PopulateUsername // Specify a callback
});
// I don't do anything else. Execution will continue when the
// callback gets called from the AJAX call.
}
function PopulateUsername(data) {
alert(data);
// Anything else I want to do, I do here, because it is only
// here that I have access to the result.
}
GetUsername(); // I call GetUsername() here, and that's it. Any
// further actions that need to happen are going to
// occur in the callback function
什麼是'foo'返回?可以在'send_request'中訪問嗎? – Jeremy 2011-06-13 15:12:43
您的ajax回調函數被異步調用,因此ret永遠不會被設置爲不同的東西。未命名函數的範圍不在foo()中,而是在本地。 – venimus 2011-06-13 15:15:29