W mojej aplikacji wdrażam wyszukiwanie błyskawiczne Google. Chciałbym uruchomić żądania HTTP, gdy użytkownik wpisze tekst. Jedyny problem, jaki mam, polega na tym, że gdy użytkownik przechodzi do spacji między imionami i nazwiskami, spacja nie jest kodowana jako a +
, co przerywa wyszukiwanie. Jak mogę zamienić spację na +
, lub po prostu bezpiecznie URL Zakodować ciąg?
$("#search").keypress(function(){
var query = "{% url accounts.views.instasearch %}?q=" + $('#tags').val();
var options = {};
$("#results").html(ajax_load).load(query);
});
javascript
jquery
ajax
http
Brian D.
źródło
źródło
$.param
.Odpowiedzi:
Spróbuj encodeURIComponent .
Przykład:
źródło
encodeURIComponent działa dla mnie dobrze. możemy podać taki adres URL w wywołaniu ajax. Kod pokazany poniżej:
źródło
Lepszy sposób:
encodeURIComponent unika wszystkich znaków oprócz następujących:
alphabetic, decimal digits, - _ . ! ~ * ' ( )
Aby uniknąć nieoczekiwanych żądań do serwera, powinieneś wywołać encodeURIComponent dla wszystkich parametrów wprowadzonych przez użytkownika, które będą przekazywane jako część identyfikatora URI. Na przykład użytkownik może wpisać „Tymianek i czas = ponownie” dla komentarza zmiennej. Nieużywanie encodeURIComponent w tej zmiennej da komentarz = Tymianek% 20 i czas = ponownie. Zauważ, że znak ampersand i znak równości oznaczają nową parę klucz i wartość. Zatem zamiast klucza komentarza POST równego „Tymianek i czas = ponownie”, masz dwa klucze POST, jeden równy „Tymianek”, a drugi (czas) równy ponownie.
W przypadku application / x-www-form-urlencoded (POST), według http://www.w3.org/TR/html401/interac...m-content-type , spacje należy zastąpić „+”, więc można wykonać zamianę kodowaniaURIComponent z dodatkową zamianą „% 20” na „+”.
Jeśli ktoś chce bardziej rygorystycznie przestrzegać RFC 3986 (który zastrzega!, ', (,) I *), mimo że znaki te nie mają sformalizowanych zastosowań URI, można bezpiecznie użyć następujących opcji:
źródło
For application/x-www-form-urlencoded (POST), per http://www.w3.org/TR/html401/interac...m-content-type, spaces are to be replaced by '+', so one may wish to follow a encodeURIComponent replacement with an additional replacement of "%20" with "+".
Jak to zrobić?Używam MVC3 / EntityFramework jako back-end, front-end zużywa wszystkie moje kontrolery projektu za pomocą jquery, wysyłanie bezpośrednio (za pomocą $ .post) nie wymaga enskrypcji danych, gdy przekazujesz parametry bezpośrednio inne niż adres URL zakodowany na stałe. Testowałem już kilka znaków, nawet wysłałem URL (ten http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1 ) jako parametr i miałem żaden problem, mimo że encodeURIComponent działa świetnie, gdy przekazujesz wszystkie dane w adresie URL (na stałe)
Zakodowany adres URL, tj.>
W przeciwnym razie nie używaj encodeURIComponent i zamiast tego spróbuj przekazać parametry w metodzie ajax post
źródło
Spróbuj tego
źródło