2009-08-20 7 views
5

J'ai regardé autour de moi, et j'essaie de trouver une solution élégante à cela, et je ne suis pas encore en trouver un. J'ai un service Web ASMX dans .NET que j'essaie d'appeler qui nécessite des paramètres.Soumission avec des guillemets simples en utilisant jQuery, Ajax et JSON

J'utilise jQuery sur le côté client pour appeler le service et mon code jQuery ressemble à quelque chose comme ceci:

$.ajax({ 
    type: "POST", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    url: "/Reviews/HotelReview.asmx/SubmitReview", 
    data: "{'name': '" + name + "', " + 
     "'info': '" info + "'}", 
    processData: true, 
    beforeSend: function() { startSubmit(); }, 
    complete: function() { submitComplete(); }, 
    error: function(xhr) { submitError(xhr); }, 
    success: function(msg) { submitSuccess(msg.d); } 
}); 

Il fonctionne très bien, sauf lorsque l'nom ou informations contiennent le ' caractère, une seule citation. Assez simple, car mon JSON définit la fin de la valeur du champ et est une simple citation. Lorsque l'un de ces champs contient un seul guillemet, tout ce que j'obtiens est une "erreur interne du serveur", mais une inspection plus approfondie en utilisant Fiddler m'a montré les résultats (je ne prendrai pas la peine de les poster) indiquant le problème de guillemets simples.

J'ai mis quelque chose en place temporairement pour supprimer les guillemets simples côté client et les remettre du côté serveur, mais cela est loin d'être élégant. Existe-t-il un moyen plus élégant d'échapper à ces guillemets simples afin que mon code puisse fonctionner?

Répondre

9

Les spécifications indiquent que dans JSON, vous ne pouvez utiliser que des guillemets autour des clés et des valeurs. Essayez-le donc avec des guillemets doubles. Je suis sûr que votre erreur sera résolue.

Vous voudrez peut-être utiliser json.js pour encoder/échapper à des caractères spéciaux dans les valeurs réelles afin de ne pas en problèmes avec des valeurs contenant "par exemple, ou la méthode stringify de http://www.json.org/js.html.

+0

réponse Grand, merci. J'ai utilisé json.js et JSON.encode (myobject) au lieu de construire une chaîne – Odd

+0

Sur les navigateurs qui le supportent (tous les navigateurs de la version actuelle), vous devriez probablement préférer l'objet JSON natif (http://blogs.msdn.com/ c'est-à-dire/archive/2008/09/10/native-json-in-ie8.aspx) si json.js ne le fait pas automatiquement pour vous. – EricLaw

Questions connexes