如何在json属性中执行函数?

时间:2011-03-10 03:04:14

标签: jquery json knockout.js

我从服务器返回这个json:

{
    "Id": 0,
    "Name": ko.observable('New Product'),
    "PurchasePrice": 0.0,
    "DownPayment": 0.0,
    "TotalPayment": 0.0,
    "MortgageInsurance": 0.0,
    "PurchaseOrRefinance": null,
    "Client": null,
    "MonthlyCosts": null,
    "ClosingCosts": null,
    "FirstLien": null,
    "SecondLien": null
}

我使用jQuery.getJson检索它,如下所示:

function addProduct(){
    $.getJSON('@Url.Action("GetNewProduct","Product")',function(data){
        viewModel.products.push(data);
    });
    viewModel.productSaved(false);
    viewModel.product(products[products.length - 1]);

}

然而,似乎代码永远不会运行。这只发生在我在json中返回函数时,如果我删除了函数,一切运行正常。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

应该是这样的>

返回此

{"Id":0,"Name":'New Product',"PurchasePrice":0.0,"DownPayment":0.0,"TotalPayment":0.0,"MortgageInsurance":0.0,"PurchaseOrRefinance":null,"Client":null,"MonthlyCosts":null,"ClosingCosts":null,"FirstLien":null,"SecondLien":null}

并使其像这样>

    function addProduct(){
        $.getJSON('@Url.Action("GetNewProduct","Product")',function(data){
            data.Name = ko.observable(data.Name);  
            viewModel.products.push(data);
        });
        viewModel.productSaved(false);
        viewModel.product(products[products.length - 1]);

    }

答案 1 :(得分:2)

开始解析数据失败
{"Name":ko.observable('New Product') }

实际上不是JSON。您只能通过JSON传递字符串/数字/对象等基本数据。 见http://www.json.org/

您可以考虑将dataType设置为'script'来调用jQuery.ajax()。

否则,您需要在回调函数或服务器代码中初始化变量,这甚至可能是更清晰的方法。