1

当我尝试发送表单时出现问题,如果存在特定字段类型,则页面返回超时。

我正在使用 KnockoutJS 的映射插件来映射来自服务器的对象。我能够修改该对象,我想将其发回。

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

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

当我发送带有此输入字段的表单时,我收到错误 7:

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

这是代表我的代码的 JSFiddle

http://jsfiddle.net/etiennenoel/4EXSy/17/

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

更新 1

有人建议使用 ko.mapping.toJSON。但是,这样做会导致一个空字符串,请在此处查看:http: //jsfiddle.net/etiennenoel/4EXSy/18/

更新 2

现在,结果输入不为空,这要感谢@abc123:http: //jsfiddle.net/etiennenoel/4EXSy/19/。但是,发送 POST 数据时我仍然会超时。您可以在我的代码中看到发送表单时发送的 POST 数据:http: //pastebin.com/hNRm4zdZ

更新 3

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

更新 4

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

更新 5

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

4

1 回答 1

1

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

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

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

JSFiddle:http: //jsfiddle.net/abc123/WReza/1/

轻松使用控制台:http: //jsfiddle.net/abc123/WReza/1/embedded/result/

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

  • 对象的所有属性都转换为可观察对象。如果更新会更改值,它将更新可观察对象。
  • 数组被转换为可观察数组。如果更新会改变项目的数量,它将执行适当的添加/删除操作。它还将尝试保持与原始 JavaScript 数组相同的顺序。

取自ko.mapping

于 2013-07-10T20:43:32.490 回答