4

jquery の ajaxfunction を使用して 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 関数まで戻すことができないことです。誰かが私がそのようなことをする方法に光を当てることができますか?

ありがとう。

4

2 に答える 2

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();
      }
});
于 2010-08-18T15:00:09.353 に答える
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();
  }
});
于 2010-08-18T15:02:14.763 に答える