2010-07-23 5 views
9

i ont un élément d'entrée avec & en valeur:Comment échapper & dans une requête POST dans jQuery?

<input type="checkbox" value="Biografie, životopisy, osudy, Domácí rock&amp;pop" /> 

Lorsque je tente de l'envoyer par une demande ajax:

$.ajax({ 
    type: "POST", 
    url: "/admin/kategorie/add/link.json", 
    data: "id="+id+"&value="+value+"&type="+type, 
    error: function(){alert('Chyba! Reloadněte prosím stránku.');} 
}); 

les données post qui obtient effectivement envoyé est:

id: 1 
pop: 
type: e 
value: Biografie, životopisy, osudy, Domácí rock 

* Notez que toutes les variables dans les données sont définies et que la valeur contient $ (thatInputElement) .attr ('value').

Comment puis-je échapper correctement le &amp; afin que le champ de message value contienne Biografie, životopisy, osudy, Domácí rock&amp;pop?

Répondre

24

Vous pouvez définir votre option data comme un objet et laisser jQuery l'encodage, comme ceci:

$.ajax({ 
    type: "POST", 
    url: "/admin/kategorie/add/link.json", 
    data: { id: id, value: value, type: type }, 
    error: function(){ alert('Chyba! Reloadněte prosím stránku.'); } 
}); 

Vous pouvez coder chaque valeur à l'aide encodeURIComponent(), comme ceci:

encodeURIComponent(value) 

Mais la première option est beaucoup plus simple/courte dans la plupart des cas :)

+1

Merci, cela avec encodeURIComponent a fait le tour, je suppose que je peux décoder il sur le côté serveur (PHP) en utilisant urldecode ($ var)? – cypher

+0

@cypher - Il devrait être décodé automatiquement, mais ça fait longtemps depuis une application PHP alors vérifiez-moi à ce sujet. –

+0

Wow, je me trompe depuis 2 ans! Cela a fait ma journée. – Chris

0

La fonction javascript "escape()" devrait fonctionner et sur le serveur la méthode HttpUtility.UrlDecode devrait être désactivée. Il peut y avoir quelques exceptions. De plus, si vous avez besoin de décoder sur le client, il y a un équivalent "unescape()" sur le client.

+0

En fait, vous êtes mieux avec « encodeURIComponent » – Pointy

0

Utiliser la morue de caractère HTML e pour & à la place: \ u0026

+0

Voir ce post associé pour référence: http://stackoverflow.com/questions/355043/how-do-i-escape-an-ampersand-in-a-javascript-string-so-that-the-page-will- validat – EAMann

2

Avez-vous essayé cette syntaxe?

data: {"id":id, "value": value, "type": type } 
+0

Cette syntaxe fonctionne, et est la meilleure option comme mentionné dans la réponse de Nick, car jQuery va encoder l'objet derrière les scènes pour vous. – Chris

0

Vous pouvez créer un objet et passer ce long à la place:

vars = new Object(); 
vars.id = id; 
vars.value = value; 
vars.type = type; 

$.ajax({ 
    type: "POST", 
    url: "/admin/kategorie/add/link.json", 
    data: vars, 
    error: function(){ alert('Chyba! Reloadněte prosím stránku.'); } 
}); 
Questions connexes