[英]Using jQuery, how can I store the result of a call to the $.ajax function, to be re-used?
[英]How do I store the result of an ajax call in a function using jQuery?
我有以下代碼:
function checkPermission(user) {
var result = 'default';
$.get('/mymodule/checkPermission.php?user=' + user, function(data) {
result = data; // does not store data into result, why ?
if (result == 'no') {
$('.sorry_msg').show();
}
});
alert(result); // shows "default".
return result == 'yes';
}
您能解釋一下為什么這行不通嗎? 問題是我無法將data
變量存儲到result
,請參見代碼中的注釋。 我猜
這是由於匿名函數引起的
,但是我對javascript的了解還不足以確切了解發生了什么。
另外,如何基於ajax調用的結果在checkPermission
函數中返回true
或false
?
您沒有得到預期的結果,因為ajax回調函數是異步執行的。 這意味着該過程無需等待ajax調用完成。 因此,在ajax調用執行了回調函數之前,外部函數checkPermission
已經終止,因此ajax回調不會更改其返回值。
@pinouchon:
我已經看到了您建議的解決方案,但是我建議不要使用同步ajax請求,因為這將在等待ajax請求的結果時阻止瀏覽器的整個用戶界面。 我建議您重新考慮執行策略,並以異步執行的ajax請求為基礎來構建它。
jQuery的get()
方法是AJAX調用,因此與您的方法異步。 在get()
調用完成時調用的函數get()
更改結果值的函數)在現有警報后執行。 嘗試這個:
$.get('/mymodule/checkPermission.php?user=' + user, function(data) {
result = data; // does not store data into result.
alert("Ajax Complete!"); // NEW ALERT CALL - called upon Ajax Completion
if (result == 'no') {
$('.sorry_msg').show();
}
});
您會看到警報的順序是“默認”,然后是“ Ajax完成!”。
回調函數的全部目的是確保您能夠在請求完成后執行一些代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.