2010-08-18 151 views
4

我試圖做一個函數,它使用jquery的ajaxfunction從我的ajax.php文件中獲取一些信息。從javascript中的嵌套函數返回

代碼:

function ajaxIt(dataLine){ 
    $.ajax({ 
     type: "POST", 
     url: "ajax.php", 
     data: "ajax=true&"+dataLine, 
     success: function(msg){ 
      console.log("[AjaxIt]: "+dataLine+" returned "+msg); 
      return msg; 
     } 
    }); 
} 
if(ajaxIt("action=loggedIn")=="1"){ 
     console.log("Logged In"); 
     loggedIn=true; 
     initiate2(); 
} 

的問題是,我不能得到成功的功能,所有的方式回到ajaxIt功能。任何人都可以闡明我如何做到這樣的事情嗎?

謝謝。

回答

9

您需要調用一個callback函數來處理數據的方法:

function ajaxIt(dataLine, cb){ 
    $.ajax({ 
     type: "POST", 
     url: "ajax.php", 
     data: "ajax=true&"+dataLine, 
     success: function(msg){     
      if($.isFunction(cb)) 
       cb.apply(null, [msg]); 
     } 
    }); 
} 

ajaxIt("action=loggedIn", function(data){ 
     if(data === "1"){ 
     console.log("Logged In"); 
     loggedIn=true; 
     initiate2(); 
     } 
}); 
+0

+1 - 傳遞迴調。說得通。 – user113716 2010-08-18 15:05:15

+0

這工作,謝謝。它比我所希望的代碼多一點(幾乎和每次只編寫ajax函數一樣),但它必須這樣做。 感謝您的快速響應。 – 2010-08-18 15:23:57

+0

@Thomas,實際上,它只是更多的代碼?只有幾個字符。沒有檢查功能,這就像一個微不足道的差異。 – jAndy 2010-08-18 15:40:00

1

$.ajax是異步的。這意味着它將立即返回,而不是等待AJAX​​查詢執行並從服務器檢索結果。到達服務器的消息時,您的ajaxIt功能已完成工作。

你應該在這裏使用的是一個延續傳遞風格。提供ajaxIt以及延續:解釋一旦ajaxIt已完成工作後應執行的操作的功能。

function ajaxIt(data, continuation) { 
    data.ajax = true; 
    $.post("ajax;php", data, function(msg) { 
    console.log("[AjaxIt]: returned "+msg); 
    continuation(msg); 
    }); 
} 

ajaxIt({action:"logged-in"}, function(result) { 
    if (result == "1") { 
    console.log("Logged In"); 
    loggedIn=true; 
    initiate2(); 
    } 
}); 
+1

延續?回調是一個更爲標準的名字。我們掛斷了電話,並儘可能地給你回電。 – 2011-04-19 23:47:06