我的类原型内运行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);

Uncaught TypeError: Cannot read property ‘name’ of undefined

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

jsFiddle

解决方法:

发生这种情况是因为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);
    }
});

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...