2009-06-01 6 views
9

J'ai ce qui suit, mais ça ne marche pas, j'ai lu quelque part sur le stackoverflow que ça marche comme ça mais je n'arrive pas à le faire fonctionner .. il erreurs ... est-ce que je fais quelque chose de mal?Passer l'objet js comme json à jquery?

Si je fais passer des données comme celui-ci - cela fonctionne - donc je sais que mon service travaille

//THIS WORKS 
data: "{one : 'test',two: 'test2' }" 


// BUT SETTING UP OBJECT doesn't work.. 

var saveData = {}; 
saveData.one = "test"; 
saveData.two = "tes2"; 


$.ajax({ 
    type: "POST", 
    url: "MyService.aspx/GetDate", 
    data: saveData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     alert(msg.d); 
    }, 
    error: function(msg) { 
    alert('error'); 
    } 

}); 
+0

Quelle est l'erreur? – cgp

+0

Comme noté dans la réponse de Matt Winckler, le problème ne réside pas dans la gestion par jQuery de l'objet que vous lui donnez (il fait la chose attendue) - mais apparemment les services .NET attendent que le JSON soit une chaîne . Y compris une bibliothèque dans le but strict de ficeler l'objet n'est pas nécessaire dans ce cas. –

+0

Il n'y a pas beaucoup de mal à inclure le ~ 2kb (avant gzip) json2.js dans votre forfait de JavaScript comprend. La prise en charge du navigateur natif dans les navigateurs comme Firefox 3.5 imite également les méthodes de json2.js, donc l'utilisation de son API est une bonne pratique pour l'avenir. –

Répondre

21

Je crois que le code va appeler .value ou .toString() sur votre objet, puis passer sur le fil. Vous voulez passer JSON.

Ainsi, comprennent la bibliothèque JSON javascript

http://www.json.org/js.html

Et puis passer ...

var saveData = {}; 
    saveData.one = "test"; 
    saveData.two = "tes2"; 


    $.ajax({ 
     type: "POST", 
     url: "MyService.aspx/GetDate", 
     data: JSON.stringify(saveData),  // NOTE CHANGE HERE 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      alert(msg.d); 
     }, 
     error: function(msg) { 
     alert('error'); 
     } 

    }); 
+0

merci .. cela a bien fonctionné .... merci .. –

+0

ou $ .param (saveData) – Plattsy

3

Selon this blog post, la raison pour laquelle il ne fonctionne pas lorsque vous essayez de passer la L'objet est que jQuery tente de le sérialiser. Du poste:

Au lieu de passer cet objet JSON par le service Web, jQuery automatiquement la sérialisation et l'envoyer:

fname=dave&lname=ward 

Pour qui, le serveur répondra avec:

Invalid JSON primitive: fname. 

Ceci est clairement pas ce que nous voulons arriver. La solution est de vous assurer que vous passez jQuery une chaîne pour le paramètre de données [...]

qui est ce que vous faites dans l'exemple qui fonctionne.

3

Ma suggestion serait d'utiliser le jquery-json plug-in et vous pouvez simplement le faire dans votre code:

... 
data: $.toJSON(saveData), 
...