Возврат из вложенной функции в javascript - PullRequest
4 голосов
/ 18 августа 2010

Я пытаюсь создать функцию, которая использует jjery-функцию 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.Может ли кто-нибудь пролить свет на то, как я могу сделать что-то подобное?

Спасибо.

Ответы [ 2 ]

9 голосов
/ 18 августа 2010

Вам нужно вызвать функцию 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();
      }
});
1 голос
/ 18 августа 2010

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