我的Class原型中的Ajax运行函数?

时间:2014-03-27 19:14:08

标签: javascript jquery ajax

function MyClass() {
    this.test = function () {
        return 'foo';
    }
}
MyClass.prototype.myMethod = function (data) {
    alert(data.name);
}
var newClass = new MyClass();
setTimeout(function () {
    $.ajax({
        url: '/echo/html/',
        data: newClass,
        success: function (data) {
            console.log('in success callback');
            console.log('received data: ' + data);
        }
    });
}, 3000);
  

未捕获的TypeError:无法读取未定义的属性“名称”

为什么ajax会触发newClass.myMethod?因为JSON解析?如何避免这个错误?

jsFiddle

1 个答案:

答案 0 :(得分:4)

这是因为jQuery在数据内部使用jQuery.param,如果查看jQuery.param的来源,它会调用所有函数并将结果用作数据

所以,我不知道你想做些什么来绕过它,但至少你知道它是什么

正在调用jQuery.ajax

jQuery.param部分来源

// Convert data if not already a string
if (s.data && s.processData && typeof s.data !== "string") {
    s.data = jQuery.param(s.data, s.traditional);
}
调用函数的

jQuery.param部分源代码:

  var prefix, s = [],
        add = function (key, value) {
        // => If value is a function, invoke it and return its value
        value = jQuery.isFunction(value) ? value() : (value == null ? "" : value);
        s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
    };

<强>更新

您可以使用processData: false禁用数据处理,但这意味着您需要手动处理数据

$.ajax({
    url: '/echo/html/',
    data: JSON.stringify(newClass), // pass the processed string
    processData: false,  // and add this 
    success: function (data) {
        console.log('in success callback');
        console.log('received data: ' + data);
    }
});