2010-05-16 180 views
5

我想在我自己的函數中使用從jQuery ajax調用返回,但它一直返回undefined。從jquery返回ajax調用

function checkUser2(asdf) { 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: "check_user.php", 
     data: { name: asdf }, 
     success: function(data){ 
      return data; 
      //alert(data); 
     } 
    }); 
} 

$("#check").click(function(){ 
    alert(checkUser2("muma")); 
}); 

Ajax調用肯定工程,因爲當我取消我的警覺我得到正確的回報,我可以看到它在螢火蟲。我在做一些愚蠢的事情嗎?

回答

7

AJAX調用是異步的 - 這意味着AJAX請求的順序與通常的程序執行無關,並且在您的程序中,這意味着checkUser2()不會將數據返回到警報。

您不能以這種方式使用$.ajax()調用中的返回值,而是將利用AJAX返回數據的代碼移到success()函數 - 它的用途。

1

試試這個:

function checkUser2(asdf) { 
    var result; 
    $.ajax({ 
     type: "POST", 
     async: false, 
     url: "check_user.php", 
     data: { name: asdf }, 
     success: function(data){ 
      result = data;    
     } 
    }); 
    return result; 
}  


$("#check").click(function(){ 
    alert(checkUser2("muma")); 
}); 

您可能需要結果變量移出作爲一個全局JavaScript變量來代替。我還沒有測試過。

+1

但是,同步ajax是一個非常糟糕的主意。 – Pointy 2012-02-24 12:27:51

+0

我同意,但這是解決OP問題的方法。而且他已經以異步方式使用ajax函數。 – Falle1234 2012-02-24 12:59:25

+0

這種方式對我也不起作用。 $(「#submitPO」)。click(function(){alert(updatePO(「444」)); });未能彈出警報。我的功能與您的功能相同。 – 2012-04-12 22:25:02

3

你能做到這一點,我認爲:

function checkUser2(asdf) { 
    var s = $.ajax({ 
     type: "POST", 
     async: false, 
     url: "check_user.php", 
     data: { name: asdf }, 
     success: function(data){ 
      return data; 
      //alert(data); 
     } 
    }).responseText; 
    return s; 
}  

但是,如jquery doc page for ajax function的第四例子說,我認爲

塊的瀏覽器,同時請求被激活。當需要同步時,通過其他方式阻止用戶交互更好。

+0

這解決了我在幾乎完全相同的場景中遇到的問題,因爲「async:false」是停止異步調用的關鍵部分。 – 2011-08-23 11:15:37

0

您還可以使用jQuery的數據方法存儲「數據」,並將其與全局jQuery對象或本地jQuery選擇器相關聯。對於例如

success: function(data) { 
    $.data('result', data); 
} 

返回值可以在使用

$.data('result') 

任何地方訪問你也可以此關聯到一個本地變量(如:$(「#身份識別碼」)。數據()),以便其局部於該對象而不是全局範圍內。

+0

我試着用你的建議。我無法讓它工作。 $(「#submitPO」)。click(function(){alert($。data('result')); });什麼也沒做。 – 2012-04-12 22:22:13