簡體   English   中英

從javascript中的嵌套函數返回

[英]Returning from a nested function in javascript

我正在嘗試使用jquery的ajax函數來從我的ajax.php文件中獲取一些信息。

碼:

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函數。 任何人都可以闡明如何做到這樣的事情嗎?

謝謝。

您需要調用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();
      }
});

$.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();
  }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM