在视图模型方法中使用jQuery post时出错

时间:2014-11-12 00:12:46

标签: jquery ajax json knockout.js

我正在使用带有jQuery帖子的视图模型方法的knockoutjs:

class MyViewModel
{
    public id = ko.observable<number>();
    public name = ko.observable<string>();
    ...

    public myMethod = function () 
       { 
           var obj = ANYTHING
           $.post('/api/controller/update', obj)
       }
} 

我通过将click属性绑定到视图模型来调用它:

<a href="#" data-bind="click: myMethod">Do Something</a>

如果单击该按钮,则会调用该方法。如果方法发布没有数据,它可以正常工作。但是,如果我传递任何类型的对象,即使是空对象{},则调用将失败:

SecurityError: The operation is insecure.
var propertyValue = mapInputCallback(rootObject[indexer]);
http://localhost:35179/Scripts/knockout-3.2.0.debug.js (line 1904)

我在这里尝试了各种各样的对象,似乎任何对象都会导致这个问题,而使用没有数据工作正常。

所以,淘汰赛并不喜欢这个,但我无法弄清楚它是什么,这完全阻碍了我的进步。对我来说令人费解的是,当我在jQuery中调用一个与淘汰代码无关的方法时,我怎么能在淘汰代码中得到一个错误(除了回调方法从淘汰赛中回调)。

1 个答案:

答案 0 :(得分:1)

您需要在对象上调用JSON.stringify并将contentType设置为'application / json'。在你的情况下,这将是:

$.ajax({
    url: '/api/controller/update',
    type: 'POST',
    data: JSON.stringify(obj),
    contentType: 'application/json'
});

请注意,jquery.post方法是jquery.ajax方法的简写。有关详情,请访问:http://api.jquery.com/jquery.post/

但是,您获得的SecurityError: The operation is insecure.通常是针对跨源问题引发的,通常是在file:/// protocol下运行网站时。请看这里: SecurityError: The operation is insecure - window.history.pushState()