Php KnockoutJS-发送包含javascript对象值的表单会导致超时

Php KnockoutJS-发送包含javascript对象值的表单会导致超时,php,javascript,html,symfony,knockout.js,Php,Javascript,Html,Symfony,Knockout.js,我在尝试发送表单时遇到了一个问题,如果存在特定的字段类型,页面将返回超时 我使用KnockoutJS的映射插件来映射来自服务器的对象。我可以修改对象,并希望将其发回 为此,我创建了一个计算函数,返回我传递给它的ko.toJSON的结果。然后,将该值放入隐藏输入中,以发送回服务器: <input type="hidden" name="a" data-bind="value: exportToJSON()" /> 当我使用此输入字段发送表单时,出现错误7: 错误7(net::ER

我在尝试发送表单时遇到了一个问题,如果存在特定的字段类型,页面将返回超时

我使用KnockoutJS的映射插件来映射来自服务器的对象。我可以修改对象,并希望将其发回

为此,我创建了一个计算函数,返回我传递给它的
ko.toJSON
的结果。然后,将该值放入隐藏输入中,以发送回服务器:

<input type="hidden" name="a" data-bind="value: exportToJSON()" />

当我使用此输入字段发送表单时,出现错误7:

错误7(net::ERR_TIMED_OUT):操作超时

下面是一个代表我的代码的JSFIDLE

我怀疑问题是因为通过POST发送的字段中的数据没有转义造成的

更新1

有人建议使用ko.mapping.toJSON。但是,这样做会导致一个空字符串,请参见此处:

更新2

现在,由于@abc123:,结果输入不是空的。 但是,我在发送POST数据时仍然会超时。您可以在我的代码中看到我发送表单时发送的POST数据:

更新3

我正在使用symfony2,我开始认为问题可能与symfony2中的某些内容有关,因为当我将表单复制并粘贴到一个简单的.html文件上时,数据会被发送

更新4

我删除了Symfony2 dev.log,点击按钮发送表单,得到超时错误,不幸的是,日志仍然是空的。。。。而且,所有的php和apache日志都没有显示任何内容

更新5


我最终决定在另一台服务器上测试我的symfony网站,它可以在另一台服务器上运行。。。现在这变得很奇怪,为什么它不能在我的本地服务器上工作?我正在使用MAMP Pro作为本地服务器

您正在返回
ko.mapping.toJSON(self.playersEvaluation)
如果不调用函数,您无法访问knockout的属性,因为它实际上是一个函数

要使其返回正确的JSON,请执行以下操作:

function appViewModel() {
    var self = this;
    self.playersEvaluation = ko.observableArray();
    self.exportToJSON = ko.computed(function() {
          return ko.mapping.toJSON(self.playersEvaluation())
    }, this);
}
JSFiddle:

要轻松使用Console,请执行以下操作:

幸运的是,由于您使用的是
ko.mapping
插件,这将起作用,因为它可以执行以下操作:

function appViewModel() {
    var self = this;
    self.playersEvaluation = ko.observableArray();
    self.exportToJSON = ko.computed(function() {
          return ko.mapping.toJSON(self.playersEvaluation())
    }, this);
}
  • 对象的所有属性都转换为可观察的属性。如果更新会改变值,它会更新可观察值
  • 数组被转换为可观察数组。如果更新将更改项目的数量,它将执行适当的添加/删除操作。它还将尝试保持与原始JavaScript数组相同的顺序

取自

您将返回
ko.mapping.toJSON(self.playersEvaluation)
如果不调用函数,您无法访问knockout的属性,因为它实际上是一个函数

要使其返回正确的JSON,请执行以下操作:

function appViewModel() {
    var self = this;
    self.playersEvaluation = ko.observableArray();
    self.exportToJSON = ko.computed(function() {
          return ko.mapping.toJSON(self.playersEvaluation())
    }, this);
}
JSFiddle:

要轻松使用Console,请执行以下操作:

幸运的是,由于您使用的是
ko.mapping
插件,这将起作用,因为它可以执行以下操作:

function appViewModel() {
    var self = this;
    self.playersEvaluation = ko.observableArray();
    self.exportToJSON = ko.computed(function() {
          return ko.mapping.toJSON(self.playersEvaluation())
    }, this);
}
  • 对象的所有属性都转换为可观察的属性。如果更新会改变值,它会更新可观察值
  • 数组被转换为可观察数组。如果更新将更改项目的数量,它将执行适当的添加/删除操作。它还将尝试保持与原始JavaScript数组相同的顺序

摘自

请回顾以及如何序列化敲除对象ko.mapping.toJSON(object);当我用您提供的行替换该行时,结果是空的。@abc123我的意思是:jsfiddle.net/etiennel/4EXSy/18如果您提供了答案,很抱歉,我工作了这么久。请查看并说明如何序列化敲除对象ko.mapping.toJSON(object);当我用您提供的行替换该行时,结果是空的。@abc123我的意思是:jsfiddle.net/etiennel/4EXSy/18如果您提供了答案,很抱歉我工作了这么久。谢谢您的时间。我试图修改我的代码(不在JSFIDLE中),但仍然得到一个超时。。。如果我对隐藏的输入字段进行注释,则超时不存在…我更新了我的问题,我认为Symfony2和某些post数据格式可能有问题…@CoachNono我强烈建议打开一个新问题,因为数据不再为空。用这种方式,您可能会在短时间内得到一位Symfony2专家。谢谢您的时间。我试图修改我的代码(不在JSFIDLE中),但仍然得到一个超时。。。如果我对隐藏的输入字段进行注释,则超时不存在…我更新了我的问题,我认为Symfony2和某些post数据格式可能有问题…@CoachNono我强烈建议打开一个新问题,因为数据不再为空。通过这种方式,您可能会在短时间内获得一位Symfony2专家。