J'implémente la recherche instantanée de Google dans mon application. Je voudrais déclencher des requêtes HTTP pendant que l'utilisateur tape dans la saisie de texte. Le seul problème que j'ai, c'est que lorsque l'utilisateur atteint un espace entre le prénom et le nom, l'espace n'est pas codé en tant que a +
, 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);
});
javascript
jquery
ajax
http
Brian D
la source
la source
$.param
.Réponses:
Essayez encodeURIComponent .
Exemple:
la source
encodeURIComponent fonctionne bien pour moi. nous pouvons donner l'url comme ceci dans un appel ajax.Le code ci-dessous:
la source
Meilleure façon:
encodeURIComponent échappe à tous les caractères sauf les suivants:
alphabetic, decimal digits, - _ . ! ~ * ' ( )
Pour éviter des demandes inattendues au serveur, vous devez appeler encodeURIComponent sur tous les paramètres saisis par l'utilisateur qui seront transmis dans le cadre d'un URI. Par exemple, un utilisateur peut taper "Thym & time = again" pour un commentaire variable. Ne pas utiliser encodeURIComponent sur cette variable donnera à nouveau commentaire = Thym% 20 & time =. 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 avez 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és par '+', donc on peut souhaiter suivre un remplacement encodeURIComponent avec un remplacement supplémentaire de "% 20" par "+".
Si l'on souhaite être plus strict en adhérant à la RFC 3986 (qui réserve!, ', (,) Et *), même si ces caractères n'ont pas d'utilisations de délimitation URI formalisées, les éléments suivants peuvent être utilisés en toute sécurité:
la source
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 "+".
Comment est-que quelqu'un peut faire ça?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 l'inscription des données, lorsque vous transmettez des paramètres directement autres que l'URL codé en dur. J'ai déjà testé plusieurs caractères, 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 ) comme paramètre et j'avais 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 en dur, c'est-à-dire>
Sinon, n'utilisez pas encodeURIComponent et essayez plutôt de passer des paramètres dans la méthode ajax post
la source
essaye celui-là
la source