我正在使用带有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中调用一个与淘汰代码无关的方法时,我怎么能在淘汰代码中得到一个错误(除了回调方法从淘汰赛中回调)。
答案 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()