0

この頻度パラメータを取得して API を呼び出す次の関数がありますが、パラメータ頻度は SUCCESS コールバック内で定義されておらず、必要です。そのパラメータをコールバックに渡す方法は?

 init : function(frequency) {
    $.ajax({
        url: 'api/v1/dashboard',
        type: "GET",
        dataType: "json",
        data : {username : "demo",frequency : frequency},
        success: function(data) {
            dashboard_hander.set_data(data.dashboard);
                            //here frequency is undefined

        }
    });
},

編集2 =====

parameters = {username : "demo",frequency : frequency}; を定義することで機能します。$.ajax の外でデータ オブジェクトとして渡すか、次のようにより高いスコープで頻度を定義します。

 var dashboard_hander = {
frequency : "",
init : function(frequency) {
    this.frequency = frequency;

       ...
    }
 } 
4

3 に答える 3

2

より高いスコープで定義するだけです。

   init : function(frequency) {
        var myData = {username : "demo",frequency : frequency};
        $.ajax({
            url: 'api/v1/dashboard',
            type: "GET",
            dataType: "json",
            data : myData,
            success: function(data) {
                alert(myData.frequency);
                dashboard_hander.set_data(data.dashboard);
                                //here frequency is undefined

            }
        });
    },
于 2012-11-06T11:03:24.457 に答える
2

デモhttp://jsfiddle.net/B2h8m/2/ そして、そのコードは次のとおりです。

var test = {init : function(frequency) {
    (function() {
        $.ajax({
            url: 'api/v1/dashboard',
            type: "GET",
            dataType: "json",
            data : {username : "demo",frequency : frequency},
            success: function(data) {
                alert(frequency);

            },
            error: function(data) {
                alert(frequency);

            }
        });
    })();
}}
test.init(10);

$.ajax をラップする追加の関数はクロージャーを作成し、その方法で頻度にアクセスできます。

編集: その上、その場所で未定義になっているのは奇妙です。このデモを参照してください。あなたが持っているのと同じコードを使用しています。そして正常に動作します。成功コールバック関数もクロージャーを作成するため、追加した追加関数は必要ありません。あなたが問題を抱えている同じコードを表示していないことを除いて、あなたのコードでは成功は次のように定義されています:

success: successHandlerFunctionName

その場合、次のように変更できます。

success:function(data) {successHandlerFunctionName(data, frequency);}

頻度は閉鎖から取られます

于 2012-11-06T11:08:48.973 に答える
1

クロージャーによって保持されるため、パラメーターfrequency 定義されます。ajax呼び出しの後で変更した場合にのみ、消えることがあります。

このコードでのデモンストレーション:

<script>
var obj = {
    init : function(frequency) {
    $.ajax({
        url: 'index2.html',
        type: "GET",
        dataType: "html",
        data : {username : "demo",frequency : frequency},
        success: function(data) {
            alert('frequency:' + frequency);
        }
    });
}};
obj.init(33);
</script>
于 2012-11-06T11:09:01.560 に答える