jquery $ ajax关闭

时间:2012-11-06 11:01:02

标签: jquery ajax closures

我有以下函数接受此频率参数并调用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;

       ...
    }
 } 

3 个答案:

答案 0 :(得分: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

            }
        });
    },

答案 1 :(得分: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的附加函数将创建一个闭包,这样你就可以访问频率。

修改 此外,奇怪你在那个地方没有定义它。请参阅this演示。它使用的是相同的代码。并且工作正常。我添加的附加功能不需要,因为成功回调函数也会创建一个闭包。除非您显示的代码不同,否则您的代码中的成功定义如下:

success: successHandlerFunctionName

在这种情况下,您可以将其更改为:

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

其中频率将来自闭幕

答案 2 :(得分:1)

参数frequency 定义的,因为它由闭包保存。只有在ajax调用后更改它才会消失。

Demonstration with this code :

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