it-swarm.com.de

URL Codiert einen String in jQuery für eine AJAX Anfrage

Ich implementiere die Google-Sofortsuche 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 + Codiert wird, wodurch die Suche unterbrochen wird. Wie kann ich das Leerzeichen entweder durch + Ersetzen oder die Zeichenfolge einfach sicher per URL verschlüsseln?

$("#search").keypress(function(){       
    var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val();
    var options = {};
    $("#results").html(ajax_load).load(query);
});
208
Brian D

Versuchen Sie encodeURIComponent .

Codiert eine URI-Komponente (Uniform Resource Identifier), indem jede Instanz bestimmter Zeichen durch eine, zwei, drei oder vier Escape-Sequenzen ersetzt wird, die die UTF-8-Codierung des Zeichens darstellen (nur vier Escape-Sequenzen für Zeichen, die aus zwei "Ersatzzeichen bestehen " Figuren).

Beispiel:

var encoded = encodeURIComponent(str);
476

encodeURIComponent funktioniert gut für mich. Wir können die URL wie folgt in Ajax Call geben. Der Code unten gezeigt:

  $.ajax({
    cache: false,
    type: "POST",
    url: "http://atandra.mivamerchantdev.com//mm5/json.mvc?Store_Code=ATA&Function=Module&Module_Code=thub_connector&Module_Function=THUB_Request",
    data: "strChannelName=" + $('#txtupdstorename').val() + "&ServiceUrl=" + encodeURIComponent($('#txtupdserviceurl').val()),
    dataType: "HTML",
    success: function (data) {
    },
    error: function (xhr, ajaxOptions, thrownError) {
    }
  });
21
Praveen04

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 = erneut" für einen variablen Kommentar eingeben. Wenn Sie encodeURIComponent für diese Variable nicht verwenden, wird comment = Thyme% 20 & time = erneut ausgegeben. Beachten Sie, dass das kaufmännische Und und das Gleichheitszeichen ein neues Paar aus Schlüssel und Wert markieren. Anstatt also einen POST Kommentar-Schlüssel gleich "Thymian & time = again" zu haben, haben Sie zwei POST Schlüssel gleich "Thymian" und einen anderen ( Zeit) gleich wieder.

Für application/x-www-form-urlencoded (POST) laut http://www.w3.org/TR/html401/interac...m-content-type müssen Leerzeichen angegeben werden ersetzt durch '+', daher kann es sinnvoll sein, nach dem Ersetzen von encodeURIComponent zusätzlich "% 20" durch "+" zu ersetzen.

Wenn man sich strenger an RFC 3986 halten möchte (das gilt auch für!, ', (,) Und *), obwohl diese Zeichen keine formalisierten URI-begrenzenden Verwendungen haben, kann Folgendes sicher verwendet werden:

function fixedEncodeURIComponent (str) {
  return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A");
}
9
StackOverFlow

Ich verwende MVC3/EntityFramework als Back-End. Das Front-End verbraucht alle meine Projekt-Controller über JQuery. Das direkte Posten (mit $ .post) erfordert keine Dateneingabe, wenn Sie andere Parameter als die fest codierte URL direkt übergeben. Ich habe bereits mehrere Zeichen getestet und habe sogar eine URL gesendet (diese http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1 =) als Parameter und hatte überhaupt kein Problem, obwohl encodeURIComponent großartig funktioniert, wenn Sie alle Daten innerhalb der URL (fest codiert) übergeben

Hardcodierte URL, d. H.>

 var encodedName = encodeURIComponent(name);
 var url = "ControllerName/ActionName/" + encodedName + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;; // + name + "/" + keyword + "/" + description + "/" + linkUrl + "/" + includeMetrics + "/" + typeTask + "/" + project + "/" + userCreated + "/" + userModified + "/" + status + "/" + parent;

Verwenden Sie andernfalls nicht encodeURIComponent und versuchen Sie stattdessen, params innerhalb der ajax post-Methode zu übergeben

 var url = "ControllerName/ActionName/";   
 $.post(url,
        { name: nameVal, fkKeyword: keyword, description: descriptionVal, linkUrl: linkUrlVal, includeMetrics: includeMetricsVal, FKTypeTask: typeTask, FKProject: project, FKUserCreated: userCreated, FKUserModified: userModified, FKStatus: status, FKParent: parent },
 function (data) {.......});
4
d1jhoni1b

probier diese

var query = "{% url accounts.views.instasearch  %}?q=" + $('#tags').val().replace(/ /g, '+');
0
genesis