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 =====

它通过定义参数来工作= {用户名:“演示”,频率:频率};在 $.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 回答