2011-12-28 4 views
0

jsonpをjQueryで使用していて、うまくいきます。しかし、コードの実行順序は、私が期待するものではありません。私は、次のような関数があることを意味します:jsonpとjQueryを使用するときのコードの実行順序

function is_server_alive() { 
    var result; 
    console.log("beginning of function result" + result); 
    $.ajax({ 
     url: server + "/is_alive", 
     async: false, 
     dataType: "jsonp", 
     jsonp: "callback", 
     success: function(JSON){ 
      result = JSON.return; 
      console.log("is_server_alive result: " + result); 
     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      console.log("server is dead " + textStatus); 
     }, 
    }); 
    console.log("end of function result: " + result); 
    return result; 
} 

私は結果変数を返します。しかし、すべてのことが起こった後、アヤックスの要求のために私はそれを行うことはできません。戻り値は未定義です。コンソールの出力は次のようになります。

beginning of function result: undefined 
end of function result: undefined 
is_server_alive result: 0 

私は真偽と非同期の両方で非同期を試しています。 $.ajax関数に、あなたは他の設定、completeを追加することができます

beginning of function result: undefined 
is_server_alive result: 0 
end of function result: 0 

答えて

0

:どのように私は結果変数を返すか、出力になるように、実行順序を変更することができ

function is_server_alive() { 
    var result; 
    console.log("beginning of function result" + result); 
    $.ajax({ 
     url   : server + "/is_alive", 
     async  : false, 
     dataType : "jsonp", 
     jsonp  : "callback", 
     success  : function(JSON){ 
      result = JSON.return; 
      console.log("is_server_alive result: " + result); 
     }, 
     error  : function(XMLHttpRequest, textStatus, errorThrown){ 
      console.log("server is dead " + textStatus); 
     }, 
     complete : funciton() { 
      console.log("end of function result: " + result); 
      return result; 
     } 
    }); 

} 
+0

でもない 'リターン結果を;'完全なハンドラでは 'is_server_alive'の返り値として実際に動作しますか? –

+0

これは、コンソール出力のみを変更しますが、実行順序は変更しません。まだAjaxリクエストは他のものの後に実行されます。 – alpert

関連する問題