2010-05-15 114 views
3

我有一個JavaScript方法調用JQuery.get(),我想從國際熱帶木材組織被叫函數的返回值..下面是代碼:如何從包含jQuery.get()的JavaScript函數獲取返回值?

function CheckExistance(userName) { 
     $.get(
      "JQueryPage.aspx", { name: userName }, 
      function(result) { 
       if (result == "1") { 
        value = true; 
       } 
       else if (result == "0") { 
        value = false; 
       } 
       else if (result == "error") { 
        value = false; 
       } 
      } 
     );     
     return value; 
    } 

我想return value;回報在get()功能設置好的價值。 ..我知道get()是異步操作anf我想要一個解決方案來做到這一點?

回答

7

您不能將該值「返回」到被調用函數中;因爲你已經意識到,AJAX調用是異步的。相反,您需要有效延遲AJAX調用之後的代碼執行;代替將此代碼放入callback函數中。

現在發生的情況是,此代碼在AJAX請求完成時執行,並且value可用。

function CheckExistance(userName, callback) { 
     $.get(
      "JQueryPage.aspx", { name: userName }, 
      function(result) { 
       var value = false; 

       if (result == "1") { 
        value = true; 
       } 


       callback(value); 
      } 
     );     
    } 

然後在您的函數可能先前已經:

function validateUserName() { 
    var input = $('someField').val(); 
    var isUnique = CheckExistance(input); 

    if (isUnique) { 
     // whatever 
    } else { 
     alert("This username is already taken"); 
    }; 
}; 

現在應該是:

function validateUserName() { 
    var input = $('someField').val(); 

    CheckExistance(input, function (isUnique) { 
     if (isUnique) { 
      // whatever 
     } else { 
      alert("This username is already taken"); 
     }; 
    }); 
}; 
+2

+1爲正確答案。回調是要走的路。 – 2010-05-15 09:18:34

+0

感謝您的快速響應,這就是我需要 – 2010-05-15 09:51:19

+0

抱歉,但我有與此解決方案有關的另一個問題 如果我想在onClick事件的按鈕,其中如果結果= false我防止提交其他提交 我做的功能,但它也執行之前validateUserName()完成 – 2010-05-15 10:56:51

-4

力量工作;

function CheckExistance(userName) { 
    var value 
    $.get(
     "JQueryPage.aspx", { name: userName }, 
     function(result) { 
      if (result == "1") { 
       value = true; 
      } 
      else if (result == "0") { 
       value = false; 
      } 
      else if (result == "error") { 
       value = false; 
      } 
     } 
    ); 
while(value == undefined); 
    return value; 
} 
+0

不,它不。首先,我打賭你的意思是「價值!=未定義」,第二,這會阻止客戶。然後,你也可以做一個同步通話,這肯定會工作,但誰在世界上需要同步呼叫;) – 2010-05-15 09:16:44

+0

你的while循環不會工作:'while(value === undefined);返回值;'會起作用,但可能是最不可取的解決方案。 – Matt 2010-05-15 09:17:55

+0

即使它工作,它可以凍結客戶端,如果有任何問題 – 2010-05-15 09:52:36

2

這裏是一個簡單的例子,完美的作品

function test() { 
     return $.ajax({ 
     url: "/url/" + param, 
     type: 'get', 
     dataType: 'html', 
     async: false 
    }).responseText 
} 
相關問題