2010-01-20 76 views
0

我想從jquery ajax函數中爲JavaScript中的全局變量賦值。將值賦給javascript中的全局變量

var trueFalse; 
$.ajax({ 
    type: "GEt", 
    url: "url", 
    data: "text=" + $("#text").val(), 
    success: function(msg) { 
    if(msg.match(/OK/) != null) { 
     trueFalse = "true"; 
    } 
    else { 
     trueFalse = "false";   
    } 
    } 
}); 
return trueFalse; 

這裏我需要從成功函數trueFalse的值。

感謝 v.srinath

+1

你需要什麼trueFalse for?很高興知道,因爲你可能以錯誤的方式做到這一點。 – kjagiello 2010-01-20 14:28:49

+0

onSubmit =「return validate()」 if(true False == true) then submit else exists exists in same page。 – 2010-01-20 14:37:24

回答

3

如果你真的不能改變應用程序邏輯,那麼你必須創建一個「同步」 Ajax請求(通過設置async:false$.ajax選項),然後它會等待,直到「GET」已經執行,然後纔將值返回給調用者。

否則,您應該重寫代碼,以便成功函數調用回一些回調函數,它現在可以繼續執行任何操作。

+0

我嘗試了異步:false,但是頁面也提交了。 – 2010-01-20 14:37:55

+0

我還沒有看到調用此代碼的代碼,所以我無法發表評論。你是否在表單提交時調用這個? – naivists 2010-01-20 14:45:33

+0

是的,我從onsubmit調用了代碼。現在一切正常。謝謝。 – 2010-01-21 10:20:10

4

您的代碼將無法工作,因爲行return trueFalse;在成功函數運行之前執行,因爲它被稱爲異步(如Ajax中的A)HTTP請求的結果。你會需要一個回調函數傳遞給這個代碼,並調用,在成功的功能:

function getWithCallback(val, callback) { 
    var scope = this; 
    $.ajax({ 
     type: "GET", 
     url: "url", 
     data: "text=" + val, 
     success: function(msg) { 
      callback.call(scope, msg.match(/OK/) || false); 
     } 
    }); 
} 

getWithCallback($("#text").val(), function(result) { 
    if (result) { 
     // Do something 
    } 
}); 

你可以試試這個驗證一個表單提交:

var validating = false; 
var valid = false; 

$('#myform').submit(function(event) { 
    if (validating) { 
     return false; 
    } 
    if (valid) { 
     return true; 
    } 
    var form = this; 
    validating = true; 
    getWithCallback($('#text').val(), function(result) { 
     if (result) { 
      valid = true; 
      form.submit(); 
     } 
     validating = false; 
    }); 
    return false; 
}); 

您還可能希望看看jQuery Validation plugin

+0

+1優雅。我認爲調用方法的第一個參數是'this'的範圍。 'callback.call(null,msg || false)' – czarchaic 2010-01-20 14:46:30

+0

@czarchaic你是對的,修正它使用'this'作用域從調用方法(我認爲...) – roryf 2010-01-20 14:49:55

0

既然你是這樣做form.onsubmit,你不能做一個異步請求。瀏覽器不會知道它應該等到異步請求完成。使用異步的好處是它不會鎖定你的腳本/瀏覽器,但在這種情況下,這實際上就是你想要的。