2009-08-27 14 views
2

私は素晴らしい作品以下の機能を持って、私は、クロスドメインを克服するためにJSONPを使用したコンテンツ・タイプを変更すると、URLにコールバック名を追加しませんでしたHTTPモジュールを書きました。関数の外でJSONP呼び出しの結果を返すには?

function AddSecurityCode(securityCode, token) { 
var res=0; 
$.ajax({ url: "http://localhost:4000/External.asmx/AddSecurityCode", 
    data: { securityCode: JSON.stringify(securityCode), 
     token: JSON.stringify(token) 
    }, 
    dataType: "jsonp", 
    success: function(json) { 
     alert(json); //Alerts the result correctly 
     res = json; 
    }, 
    error: function() { 
     alert("Hit error fn!"); 
    } 
}); 
return res; //this is return before the success function? not sure. 

}

解像度変数が未定義alwayes来ています。私はjsonpでasync = falseを使うことはできません。 のでどのように私は、関数の外に結果を返すことができます? と私は確信しsubsequant通話のためにそれを行う必要があります。

してくださいアドバイス、ありがとう。 問題は、私はあなたがAddSecurityCodeは、あなたがして内部呼び出しcallbackパラメータ(実行するためにすなわち機能)をとるようにあなたのコードの流れを書き換える必要があり、この関数の外

答えて

6

You simply cannot do this.

を結果値を返すことはできませんですあなた成功コールバック:あなたは解像度が作る、関数内で宣言している

function AddSecurityCode(securityCode, token, callback) { 

    $.ajax({ 
     .... 
     success: function(json) { 
      alert(json); //Alerts the result correctly 
      callback(json); // HERE BE THE CHANGE 
     } 
     .... 
    }); 
} 
+0

感謝を言及する他の回答のようにコールバック関数を使用する必要があり、これは、私が成功内部関数を呼び出すするつもりだった、とチェーンがそのように呼び出すことができますが、よりクリーンでなかったような関数を渡す唯一の方法のようにされているようです。 – Adel

0

は、その関数のローカルスコープです。だからスタートがある。関数外でresを宣言し、何が起こるかを見てください。 Ajaxのリクエストオブジェクト

$.ajax({ 
    ... 
    async: false, 
    ... 
}); 
return res; 

に偽しかし、それはブラウザをブロックしますし、完成AJAX呼び出しまでは応答していないと見られますので、これはお勧めしません。

0

非同期を追加します。非同期プロセスは

関連する問題