2010-07-23 11 views
9

mam element wejściowy z & wartości:Jak uciec i w żądaniu POST w jQuery?

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

gdy próbuję wysyłając go za pośrednictwem ajax życzenie:

$.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.');} 
}); 

dane stanowisko, że faktycznie jest wysyłany jest:

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

* Należy pamiętać, że wszystkie zmienne w danych są zdefiniowane, a wartość zawiera $ (thatInputElement) .attr ("wartość").

Jak mogę poprawnie uciec z &amp;, aby pole pocztowe value zawierało Biografie, životopisy, osudy, Domácí rock&amp;pop?

Odpowiedz

24

Można ustawić opcję data jako przedmiot i niech jQuery zrobić kodowanie, tak:

$.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.'); } 
}); 

Ty może zakodować każda wartość używając encodeURIComponent(), tak:

encodeURIComponent(value) 

Ale pierwsza opcja jest znacznie prostsza/krótsza w większości przypadków :)

+1

Dziękuję, to z encodeURIComponent wystarczyły, zakładam, że mogę rozszyfrować to po stronie serwera (PHP) przy użyciu urldecode ($ var)? – cypher

+0

@CYPP - Powinien być automatycznie zdekodowany, ale od czasu aplikacji PHP jest na zawsze, więc sprawdź to. –

+0

Wow, robię to źle przez 2 lata! To poprawiło mój humor. – Chris

0

Funkcja javascript "escape()" powinna działać, a na serwerze metoda HttpUtility.UrlDecode powinna zostać unescape. Mogą być pewne wyjątki. Dodatkowo, jeśli chcesz zdekodować klienta, istnieje odpowiednik "unescape()" na kliencie.

+0

Właściwie jesteś lepiej z „encodeURIComponent” – Pointy

0

Użyj kodowania znaków HTML e dla & zamiast: \ u0026

+0

Zobacz ten powiązany wpis w celach informacyjnych: http://stackoverflow.com/questions/355043/how-do-i-escape-an-ampersand-in-a-vasvascript-string-to-that-the-page-will- validat – EAMann

2

Czy wypróbowałeś tę składnię?

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

Ta składnia działa i jest lepszą opcją, jak wspomniano w odpowiedzi Nicka, ponieważ jQuery zakoduje obiekt za kulisami. – Chris

0

Można utworzyć obiekt i przekazać, że wraz zamiast:

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.'); } 
}); 
Powiązane problemy