我的问题标题可能没有说得好,抱歉。
我想创建一个Javascript类来简化向php页面发送信息的过程。
我使用this answer中描述的方法来创建我的课程
这是我到目前为止所做的:
var ParseObject = Class.extend({
init: function(classname, id){
// required properties
this.classname=classname;
this.objects=[];
this.fields=[];
// optional properties
if(id && id != '') this.id='';
//this.command = command;
//this.callback='';
//this.parent=[];
//this.children=[];
//this.relation='';
},
set: function(field, value) {
if(field == 'classname') this.classname=value;
else if(field == 'callback') this.callback=value;
else if(field == 'command') this.command=value;
else this.fields.push(field, value);
},
addChild: function(obj){
this.children ? this.children.push(obj) : this.children= [obj];
},
addParent: function(linkedFieldName, parentClassName, parentId){
this.parent=[linkedFieldName, parentClassName, parentId];
},
addObject: function(obj){
this.objects.push(obj);
},
isRelatedBy: function(relation){
this.relation=relation;
},
send: function(){
var obj = this;
$.ajax({
type: "POST",
dataType: "json",
url: "php/parseFunctions.php",
data: {data:obj},
success: function(response) {
// do stuff
},
error: function(response) {
// do stuff
}
});
}
});
以下是我尝试使用该课程的方法:
var testObject = new ParseObject('TestObject');
testObject.set('callback','testResopnse');
testObject.set('command','save');
testObject.set('title','New Title');
testObject.set('description','New Description');
testObject.set('stuff',['one','two','three']);
testObject.addParent(['parent', 'MeComment', 'kRh5xcpkhz']);
testObject.send();
在我到达testObject.send();
我期望将下面的对象发送到我的PHP页面:
但相反,我得到的是" Uncaught RangeError:超出最大调用堆栈大小"
为什么会发生这种情况,我怎样才能达到预期效果?
Per Quentin的建议,这让我排序
var obj =$.parseJSON(JSON.stringify(this));
答案 0 :(得分:4)
当您将对象传递给 // If value is a function, invoke it and return its value
value = jQuery.isFunction(value) ? value() : (value == null ? "" : value);
时,jQuery将call param
on it。
该功能包括以下代码:
window
最终在param
的上下文中调用对象中的所有函数(包括构造函数)。我没有找到所有效果,但它显然是不可取的,并且基于错误消息,导致无限递归。
这里有几个选项:
data:
data:
contentType: "application/json"
,设置请求Object.defineProperty()
并更改PHP以期望JSON格式的请求而不是表单格式化的请求。enumerable
并标记所有函数,使它们不是{{1}}。我怀疑这种方法会失败,因为对象本身就是一个函数。