2014-02-26 77 views
0

我有以下功能Ajax調用返回undefined如何解決這一問題

function checkIfUserExist(userName){ 
    $.ajax({ 
     type : "POST", 
     url : "/test/checkUserName/", 
     data : "userName=" + userName, 
     success : function(data) { 
      return data; 

     } 
    }); 

} 

我想從另一個功能

$('#userName').blur(function() { 
    alert (checkIfUserExist($('#userName').val())); 
} 
每次我在警告框越來越 undefined時間

調用它。但它應該顯示警告框中的返回值。

如何解決這個問題?

回答

2

你不能從AJAX調用這樣的返回值。由於ajax是異步進程,它不會等待成功事件發生。如果你想這樣做,你應該嘗試同步ajax。 像這樣

function checkIfUserExist() { 
return $.ajax({ 
    type: "POST", 
    url: "/test/checkUserName/", 
    async: false 
}).responseText; 
} 

但它不是做一件好事。它也會凍結瀏覽器。你可以做的好事是抓住Ajax的Success事件,並做相應的事情

+2

同步ajax通常是一個壞主意 - 它會阻止整個用戶界面,而wai ting迴應 – codebox

+0

ajax的用途是什麼?如果你讓它「同步」? – zzlalani

-1

不要從AJAX返回值,因爲這是一個異步調用,您alert將在成功之前被調用,而結果總是undefined

警報輸出與您success回調。

function checkIfUserExist(userName){ 
    $.ajax({ 
     type : "POST", 
     url : "/test/checkUserName/", 
     data : "userName=" + userName, 
     success : function(data) { 
      alert(data); 

     } 
    }); 

} 

並調用此函數

$('#userName').blur(function() { 
    checkIfUserExist($('#userName').val()); 
} 
+0

修復了代碼,但不說明異步JS的基礎知識(又名中,* *理由OP的代碼無法正常工作。) – Cerbrus

+0

@Cerbrus是我正在解釋它在我的回答中,當你投下這個答案時 – zzlalani

+0

我認爲你的意思是undefined,而不是null – codebox

-1

數據不應該是json格式嗎?

data: { "userName": userName } 

此外,請考慮使用「完成」功能,而不是成功。這應該有助於調用的異步性質。

1

這就是正確的行爲,因爲ajax是異步的。

爲了達到你的目標,你需要Jquery.when

$('#userName').blur(function() { 
    $.when( 
     checkIfUserExist($('#userName').val()) 
    ) 
    .then(function(data) { 
     alert(data); 
    }); 
}); 
+0

我收到語法錯誤。 - 令牌上的語法錯誤「;」,) \t預計 – LynAs

+0

@LynAs,我的壞,抱歉,修正 – Evgeniy

+0

它沒有做任何事 – LynAs