Returning from a nested function in javascript

心不动则不痛 提交于 2019-12-10 16:51:35

问题


I'm trying to make a function that uses jquery's ajaxfunction to get some info from my ajax.php file.

code:

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

The problem is that I can't get the success function to return all the way to the ajaxIt function. Could anyone shed some light onto how I could do something like that?

Thanks.


回答1:


You need to invoke a callback function to process data that way:

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



回答2:


$.ajax is asynchronous. This means that it will return right away, instead of waiting for the AJAX query to execute and retrieve a result from the server. By the time the message from the server arrives, your ajaxIt function has already finished working.

What you should use here is a continuation-passing style. Provide ajaxIt with a continuation: a function that explains what should be done once ajaxIt has finished working.

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


来源:https://stackoverflow.com/questions/3513423/returning-from-a-nested-function-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!