gpt4 book ai didi

javascript - 我的类原型(prototype)中的 Ajax 运行函数?

转载 作者:行者123 更新时间:2023-11-29 10:15:35 27 4
gpt4 key购买 nike

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);
}
});

关于javascript - 我的类原型(prototype)中的 Ajax 运行函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22697068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com