2009-02-23 52 views
0

如果我有這樣的功能:JavaScript變量的作用域問題

function validateSomething() 
{ 
    var valid; 
    $.post("something.php", {x:y}, 
    function(data) 
    { 
    if (isSomething(data)) 
     valid=true; 
     //Here referring to the valid variable 
     //set outside this function, in the 
     // parent function 
    else 
     valid=false; 
    }); 
    return valid/ 
} 

,纔有可能設定valid從Ajax請求完成後,這就是所謂的子功能內?如果沒有,我怎麼能根據ajax請求的結果從父函數返回true/false?

回答

2

如果不是,我該如何根據ajax請求的結果從父函數返回true/false?

你不能;這不是如何Asynchrony工作。

AJAX調用可能永遠不會返回!父親函數應該觸發驗證請求,然後假定它是無效的(比如,通過禁用提交按鈕)或顯示「我在想」反饋(旋轉指示符)。

然後,AJAX返回處理函數將清理那些部分(通過啓用按鈕或將指示器更改爲綠色複選標記或紅色X)。如果AJAX呼叫永遠不會通過 - 它保持無效。如果確實通過了,那就是清理過程發生的時間。

+0

但是這都是作爲表單驗證過程的一部分完成的。所以我的代碼遍歷所有字段(當點擊提交時),驗證它們全部,並且如果所有驗證函數返回true,則它將提交表格 – 2009-02-23 13:15:51

+0

這怎麼做? – 2009-02-23 13:17:02

1

有效期將被更新,是的。但是:AJAX-Call是異步的,即。你的函數肯定會在父函數返回後被調用。沒有辦法等待異步過程完成。

0

雖然您可以從內部函數設置變量,但由於內部函數在異步完成後將被調用,因此不會及時設置返回。根據你正在嘗試做什麼,你可以通過回調函數簡單地調用根據返回值發生的動作來處理它。例如,如果你點擊一個鏈接,如果帖子成功,你可以從你的validateSomething函數返回false,然後在成功後從鏈接中獲取href並使用它的值設置location.href來模擬效果點擊鏈接的鏈接(不重新運行驗證功能)。