Ich implementiere die Sofort-Suche von Google in meiner Anwendung. Ich möchte HTTP-Anforderungen auslösen, während der Benutzer die Texteingabe eingibt. Das einzige Problem, das ich habe, ist, dass wenn der Benutzer zu einem Leerzeichen zwischen Vor- und Nachnamen gelangt, das Leerzeichen nicht als a codiert wird +
, wodurch die Suche unterbrochen wird. Wie kann ich entweder das Leerzeichen durch eine +
oder nur eine sichere URL-Codierung der Zeichenfolge ersetzen ?
$("#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.
quelle
quelle
$.param
.Antworten:
Versuchen Sie encodeURIComponent .
Beispiel:
quelle
encodeURIComponent funktioniert gut für mich. Wir können die URL wie folgt in einem Ajax-Aufruf angeben. Der unten gezeigte Code:
quelle
Besserer Weg:
encodeURIComponent maskiert alle Zeichen mit Ausnahme der folgenden:
alphabetic, decimal digits, - _ . ! ~ * ' ( )
Um unerwartete Anforderungen an den Server zu vermeiden, sollten Sie encodeURIComponent für alle vom Benutzer eingegebenen Parameter aufrufen, die als Teil eines URI übergeben werden. Beispielsweise könnte ein Benutzer "Thymian & Zeit = wieder" für einen variablen Kommentar eingeben. Wenn Sie encodeURIComponent für diese Variable nicht verwenden, erhalten Sie erneut comment = Thyme% 20 & time =. Beachten Sie, dass das kaufmännische Und und das Gleichheitszeichen ein neues Schlüssel- und Wertepaar markieren. Anstatt einen POST-Kommentarschlüssel gleich "Thyme & time = again" zu haben, haben Sie zwei POST-Schlüssel, einen gleich "Thyme" und einen anderen (time) gleich again.
Für die Anwendung / x-www-form-urlencoded (POST) sind Leerzeichen gemäß http://www.w3.org/TR/html401/interac...m-content-type durch '+' zu ersetzen Möglicherweise möchten Sie einem Ersatz von encodeURIComponent mit einem zusätzlichen Ersatz von "% 20" durch "+" folgen.
Wenn Sie sich strenger an RFC 3986 halten möchten (was reserviert !, ', (,) Und *), obwohl diese Zeichen keine formalisierten URI-Begrenzungsverwendungen haben, kann Folgendes sicher verwendet werden:
quelle
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 "+".
Wie macht man das?Ich verwende MVC3 / EntityFramework als Back-End. Das Front-End verbraucht alle meine Projektcontroller über jquery. Für das direkte Posten (mit $ .post) ist keine Datenangabe erforderlich, wenn Sie andere Parameter als die fest codierte URL direkt übergeben. Ich habe bereits mehrere Zeichen getestet und sogar eine URL (diese http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1 ) als Parameter gesendet und hatte Kein Problem, obwohl encodeURIComponent hervorragend funktioniert, wenn Sie alle Daten innerhalb der URL übergeben (fest codiert).
Hardcodierte URL dh>
Verwenden Sie andernfalls nicht encodeURIComponent und versuchen Sie stattdessen, Parameter innerhalb der Ajax-Post-Methode zu übergeben
quelle
Probier diese
quelle