[英]Object's function getting called while sending data via AJAX
通过AJAX请求发送具有功能的普通javascript对象会导致调用此功能。 为什么会这样呢? 发送JSON数据时不会发生此问题。 将对象转换为JSON的最佳方法是什么?
我附上了演示此行为的示例代码。
var A = (function () {
function A(value) {
this.value = value;
}
A.prototype.getValue = function () {
console.log('getValue');
return this.value;
};
return A;
})();
$(document).ready(function () {
var a = new A(10);
var xhr = $.ajax("http://example.com/", {
data: a,
type: 'post',
error: function (data) {
console.log('error');
},
success: function (data) {
console.log('success');
},
crossDomain: true
});
}
代码输出为:
getValue
success
这是因为jQuery.param
(由jQuery.ajax
内部使用)在序列化请求参数时使用函数的返回值 。 从文档:
从jQuery 1.3开始,使用函数的返回值代替函数作为字符串。
因此,当jQuery.param
遇到您a
对象并看到getValue
属性是一个函数时,它将调用该函数并使用(序列化的)返回值。
无论哪种方式,为什么要传递诸如请求数据之类的复杂对象? 如果您不希望将该函数与请求数据一起传递,则最好为您的A
类创建一个自定义序列化函数,例如:
A.prototype.serialize = function() {
return { value: this.value };
}
并改用它:
var xhr = $.ajax("http://example.com/", {
data: a.serialize(),
// ...
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.