簡體   English   中英

如何使用jQuery將ajax調用的結果存儲在函數中?

[英]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函數中返回truefalse

您沒有得到預期的結果,因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM