URL Codifica una stringa in jQuery per una richiesta AJAX

Sto implementando la Ricerca istantanea di Google nella mia applicazione. Vorrei licenziare le richieste HTTP mentre l’utente digita l’input di testo. L’unico problema che sto avendo è che quando l’utente raggiunge uno spazio tra nome e cognome, lo spazio non è codificato come + , interrompendo così la ricerca. Come posso sostituire lo spazio con un + o semplicemente con sicurezza URL Encode the string?

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

Prova encodeURIComponent .

Codifica un componente URI (Uniform Resource Identifier) ​​sostituendo ogni istanza di determinati caratteri con una, due, tre o quattro sequenze di escape che rappresentano la codifica UTF-8 del carattere (saranno solo quattro sequenze di escape per caratteri composti da due “surrogati” ” personaggi).

Esempio:

 var encoded = encodeURIComponent(str); 

encodeURIComponent funziona bene per me. possiamo dare l’url in questo modo nella chiamata Ajax. Il codice mostrato di seguito:

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

Modo migliore:

encodeURIComponent sfugge a tutti i caratteri tranne quanto segue: alphabetic, decimal digits, - _ . ! ~ * ' ( ) alphabetic, decimal digits, - _ . ! ~ * ' ( )

Per evitare richieste inaspettate al server, dovresti chiamare encodeURIComponent su qualsiasi parametro inserito dall’utente che verrà passato come parte di un URI. Ad esempio, un utente può digitare “Timo e ora = di nuovo” per un commento variabile. Non usare encodeURIComponent su questa variabile darà il commento = Timo% 20 & tempo = di nuovo. Si noti che la e commerciale e il segno di uguale segnano una nuova coppia di chiavi e valori. Quindi, invece di avere una chiave di commento POST uguale a “Timo e tempo = di nuovo”, hai due chiavi POST, una uguale a “Timo” e un’altra (ora) uguale a nuovo.

Per l’applicazione / x-www-form-urlencoded (POST), per http://www.w3.org/TR/html401/interac…m-content-type , gli spazi devono essere sostituiti da ‘+’, quindi si potrebbe desiderare di seguire una sostituzione di codificaURIComponente con una sostituzione aggiuntiva di “% 20” con “+”.

Se si desidera essere più rigorosi nell’aderire a RFC 3986 (che riserva!, ‘, (,) E *), anche se questi caratteri non hanno usi di delimitazione URI formalizzati, è ansible utilizzare in modo sicuro quanto segue:

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

Sto usando MVC3 / EntityFramework come back-end, il front-end consuma tutti i miei controller di progetto tramite jquery, postando direttamente (usando $ .post) non richiede la codifica dei dati, quando si passano param direttamente diversi da URL hardcoded. Ho già testato diversi caratteri che ho inviato anche un URL (questo http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1 ) come parametro e nessun problema, anche se encodeURIComponent funziona alla grande quando si passano tutti i dati all’interno dell’URL (hardcoded)

URL hardcoded cioè>

  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; 

Altrimenti non usare encodeURIComponent e provare invece a passare parametri all’interno del metodo ajax post

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

prova questo

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