无法使用$ .post()发布javascript对象

时间:2017-05-09 11:31:18

标签: javascript jquery

我正在尝试创建一个javascript对象,以便我可以稍后将其发布到我的后端,但我遇到了一些问题。

这是我正在尝试的代码。当我将console.log创建到对象时,一切都很好但是当我用$.post发布时,我遇到了一些错误。我认为错误正在发生,因为在对象中我有一个方法,可能导致问题,但我需要该方法动态生成对象。

var appointmentsPart = {  
    "id":"appointments",
    "integrationId":"1258514282"
}


var appointments = new objectPart('appointments', '1258514282');

appointments.addPart(appointmentsPart);

console.log(appointments); //this shows the correct object

function objectPart(id, integrationId){
    this.id  = id;
    this.integrationId = integrationId;
    this.part = new Array();
    this.addPart = function(obj){
        this.part.push(obj);
    }
}

当我创建console.log()时,everythings就像我想要的那样显示,但问题是当我想使用$ .post()将此对象发布到php文件时

$.post('/api.php', {api: appointments}, function(){
    console.log('test')
});

我得到Cannot read property 'push' of undefined

我创建了一个jsfiddle来帮助您了解我的问题。

3 个答案:

答案 0 :(得分:5)

这里有一个范围问题;

this.part = new Array();
this.addPart = function(obj){
    this.part.push(obj);
}

您对function(obj)的使用会创建自己的范围,并拥有自己的this变量。因此,this.partthis.part = new Array();

中设置的相同

要解决,请使用 arrow 功能;

this.part = new Array();
this.addPart = (obj) => {
    this.part.push(obj);
}
  

箭头函数表达式的语法短于函数表达式,并且不绑定它自己的this,arguments,super或new.target。

这是您jsFiddle的分叉版本,以向您展示它。

答案 1 :(得分:3)

this.part.push this显示不是objectPart功能,而是addPart功能。错过使用this;将this保存到变量以在其他函数中使用它。

答案 2 :(得分:2)

错误的原因是this指的是什么。将代码更改为此代码以使阵列推送工作。

function objectPart(id, integrationId){
    this.id  = id;
    this.integrationId = integrationId;
    this.part = new Array();
    var arr = this.part;
    this.addPart = function(obj){
        arr.push(obj);
    }
}