【问题标题】:How to execute a function inside json property?如何在 json 属性中执行函数?
【发布时间】:2011-07-12 10:00:16
【问题描述】:

我从服务器返回这个 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 中返回函数时,如果我删除函数一切运行正常。有没有办法解决这个问题?

【问题讨论】:

  • 函数不是valid JSON
  • 这个函数ko.observable在你的javascript中?

标签: jquery json knockout.js


【解决方案1】:

应该是这样的>

返回这个

{"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]);

    }

【讨论】:

    【解决方案2】:

    解析您的数据失败,因为

    {"Name":ko.observable('New Product') }
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-10
      • 1970-01-01
      • 2020-11-22
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      相关资源
      最近更新 更多