2011-03-10 1 views
1

Je reviens ce JSON du serveur:Comment exécuter une fonction dans la propriété 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 
} 

-je le récupérer en utilisant jQuery.getJson comme ceci:

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

} 

Cependant, il semble que si le code ne fonctionne jamais. Cela ne se produit que lorsque je retourne la fonction dans le JSON, si je supprime la fonction tout va bien. Y a-t-il un moyen de résoudre ce problème?

+3

fonctions ne sont pas (http://json.org [JSON valide] – sdleihssirhc

+0

Cette fonction 'ko.observable' est dans votre javascript? –

Répondre

2

vos données échoue Parsing depuis

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

est pas réellement JSON. Vous ne pouvez transmettre que des données de base telles que des chaînes/nombres/objets via JSON. Voir http://www.json.org/

Vous pouvez appeler jQuery.ajax() avec dataType défini sur 'script'.

Dans le cas contraire, vous devez initialiser vos variables dans votre fonction de rappel ou dans le code du serveur, ce qui peut même être une approche plus propre.

3

Il devrait être comme ça>

Retour cette

{"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} 

et faire comme ceci>

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

    } 
Questions connexes