对象内部的回调

时间:2015-01-12 00:19:22

标签: javascript ajax object callback

为什么没有这项工作

我通过jquery在一个对象中有一个ajax函数,并且由于某种原因它是 没有看到回调函数内对象中的其他函数。

function object () {

this.test = function () { alert ("test") }

this.makeQuery = function() {
$.ajax( { 
    url: stuff,
    dataType: "xml",
    success: function (data) {  makeData(data) } } )        

}   

this.makeData = function (data) {

  this.test();   // Error "this.test() is not a function"
}

}

1 个答案:

答案 0 :(得分:1)

原因是因为使用不同的“this”调用回调函数。在jQuery.ajax调用的情况下,“this”函数是jqXHR对象http://api.jquery.com/Types/#jqXHR。因此,如果要将“this”对象传递给回调,则必须在范围内捕获它并引用捕获的变量。像这样(如果我修复了所有语法错误):

function myFunction() {
    var that = this;
    this.test = function () { alert ("test") };

    this.makeQuery = function() {
        jQuery.ajax({
                type: 'post',
                url: 'someUrl',
                dataType: 'json',
                success: function (data, textStatus, jqXHR) {
                    that.makeData(data);
                },
                error: function (jqXHR, textStatus, textError) {
                }
            });
        };

    this.makeData = function(data) {
        this.data = data
        this.test();   // Error "this.test() is not a function"
    };
}
var m = new myFunction();
m.makeQuery();