web-dev-qa-db-fra.com

URL Encoder une chaîne dans jQuery pour une demande AJAX

J'implémente la recherche instantanée de Google dans mon application. Je voudrais lancer des requêtes HTTP lorsque l'utilisateur saisit du texte. Le seul problème que je rencontre est que lorsque l'utilisateur accède à un espace situé entre le prénom et le nom de famille, celui-ci n'est pas codé sous la forme d'un +, interrompant ainsi la recherche. Comment puis-je remplacer l'espace par un +, ou simplement en toute sécurité URL Encoder la chaîne?

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

Essayez encodeURIComponent .

Encode un composant URI (Uniform Resource Identifier) ​​en remplaçant chaque occurrence de certains caractères par une, deux, trois ou quatre séquences d'échappement représentant le codage UTF-8 du caractère (il n'y aura que quatre séquences d'échappement pour les caractères composés de deux "substituts". " personnages).

Exemple:

var encoded = encodeURIComponent(str);
476
Anders Fjeldstad

encodeURIComponent fonctionne bien pour moi. nous pouvons donner l'URL comme ceci en appel ajax.Le code ci-dessous:

  $.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

Meilleure façon:

encodeURIComponent échappe à tous les caractères sauf les suivants: alphabetic, decimal digits, - _ . ! ~ * ' ( )

Pour éviter les demandes inattendues au serveur, vous devez appeler encodeURIComponent pour tous les paramètres entrés par l'utilisateur qui seront transmis dans le cadre d'un URI. Par exemple, un utilisateur peut taper "Thyme & time = again" pour un commentaire de variable. Ne pas utiliser encodeURIComponent sur cette variable donnera comment = Thyme% 20 & time = à nouveau. Notez que l'esperluette et le signe égal marquent une nouvelle paire clé/valeur. Ainsi, au lieu d’avoir une clé de commentaire POST égale à "Thyme & time = again", vous disposez de deux clés POST, une égale à "Thyme" et une autre (time) égale à nouveau.

Pour application/x-www-form-urlencoded (POST), par http://www.w3.org/TR/html401/interac...m-content-type , les espaces doivent être remplacé par "+", on peut donc souhaiter suivre un remplacement de encodeurURIComponent par un remplacement supplémentaire de "% 20" par "+".

Si l'on souhaite adhérer plus rigoureusement à la RFC 3986 (ce qui réserve!, ', (,) Et *), même si ces caractères ne possèdent pas d'usages de délimitation d'URI formalisés, les éléments suivants peuvent être utilisés en toute sécurité:

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

J'utilise MVC3/EntityFramework comme back-end, le front-end consomme tous mes contrôleurs de projet via jquery, la publication directe (à l'aide de $ .post) ne nécessite pas la saisie de données, lorsque vous transmettez directement des paramètres autres qu'URL codés en dur. J'ai déjà testé plusieurs caractères et j'ai même envoyé une URL (celle-ci http://www.ihackforfun.eu/index.php?title=update-on-url-crazy&more=1&c=1&tb=1&pb=1 =) en tant que paramètre et n’a aucun problème, même si encodeURIComponent fonctionne très bien lorsque vous transmettez toutes les données dans l’URL (codé en dur)

URL codée i.e.>

 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;

Sinon, n'utilisez pas encodeURIComponent et essayez plutôt de passer des paramètres dans la méthode post ajax

 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

essaye celui-là

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