Dans une application Web qui utilise des appels AJAX, je dois soumettre une demande mais ajouter un paramètre à la fin de l'URL, par exemple:
URL d'origine:
URL résultante:
http: //server/myapp.php? id = 10 & enabled = true
Recherche d'une fonction JavaScript qui analyse l'URL en regardant chaque paramètre, puis ajoute le nouveau paramètre ou met à jour la valeur si elle existe déjà.
javascript
url
parsing
parameters
query-string
Lessan Vaezi
la source
la source
Réponses:
Une implémentation de base que vous devrez adapter ressemblerait à ceci:
C'est environ deux fois plus rapide qu'une regex ou une solution basée sur la recherche, mais cela dépend complètement de la longueur de la chaîne de requête et de l'index de toute correspondance
la méthode des regex lents que j'ai comparée par souci de fin (environ + 150% plus lent)
la source
encodeURIComponent
plutôt queencodeURI
? Sinon , tous les personnages comme=
,&
en votre nom ou valeur corrompra l'URI.Vous pouvez utiliser l'un d'entre eux:
Exemple:
la source
XML
àhttp://foo.bar/?x=1&y=2
pour que le résultat final soithttp://foo.bar/?x=1&y=2&XML
. Est-ce possible? J'ai essayéurl.searchParams.set('XML');
,url.searchParams.set('XML', null);
eturl.searchParams.set('XML', undefined);
- mais aucun travaillé dans Chrome 63 .Merci à tous pour votre contribution. J'ai utilisé du code annakata et modifié pour inclure également le cas où il n'y a aucune chaîne de requête dans l'URL. J'espère que cela vous aidera.
la source
escape(key)
etescape(value)
à laencodeURIComponent
fonction.if (kvp.length==1 && kvp[0]="")
?if (document.location.search)
C'est une solution très simple. Il ne contrôle pas l'existence des paramètres et ne modifie pas la valeur existante. Il ajoute votre paramètre à la fin, afin que vous puissiez obtenir la dernière valeur dans votre code principal.
la source
url = (url.indexOf("?") != -1 ? url.split("?")[0]+"?"+part+"&"+url.split("?")[1] : (url.indexOf("#") != -1 ? url.split("#")[0]+"?"+part+"#"+ url.split("#")[1] : url+'?'+part));
function appendQs(url, key, value) { return url + (url.indexOf('?') >= 0 ? "&" : '?') + encodeURIComponent(key) + "=" + encodeURIComponent(value); };
https://localhost/preview/inventory.html?sortci=priceASC&sortci=priceASC&sortci=stitle
.Voici une version largement simplifiée, faisant des compromis pour la lisibilité et moins de lignes de code au lieu de performances micro-optimisées (et nous parlons d'une différence de quelques millisecondes, de manière réaliste ... en raison de la nature de cela (opérant sur l'emplacement du document actuel) ), cela sera très probablement exécuté une fois sur une page).
Vous utiliseriez alors ceci comme ceci:
la source
[\?&]
par([\?&])
dans le RegExp (je le modifierais moi-même mais je ne sais pas si la politique de la communauté permet de corriger les bugs dans les réponses).Et veuillez noter que les paramètres doivent être encodés avant d'être ajoutés dans la chaîne de requête.
http://jsfiddle.net/48z7z4kx/
la source
http://abc.def/?a&b&b
)..set premier agrément est la clé, le second est la valeur.
la source
J'ai une «classe» qui fait ça et la voici:
J'ai surchargé la méthode toString, donc il n'est pas nécessaire d'appeler QS :: getQueryString, vous pouvez utiliser QS :: toString ou, comme je l'ai fait dans les exemples, simplement compter sur l'objet contraint dans une chaîne.
la source
Si vous avez une chaîne avec une URL que vous souhaitez décorer avec un paramètre, vous pouvez essayer ceci:
Ça veut dire ça ? sera le préfixe du paramètre, mais si vous l'avez déjà fait ? dans
urlstring
, que & sera le préfixe.Je recommanderais également de le faire
encodeURI( paramvariable )
si vous n'avez pas de paramètre codé en dur, mais il se trouve à l'intérieur d'unparamvariable
; ou si vous avez des personnages amusants.Voir Encodage d'URL javascript pour l'utilisation de la
encodeURI
fonction.la source
C'est un moyen simple d'ajouter un paramètre de requête:
Et c'est plus ici .
Veuillez noter les spécifications de support .
la source
Consultez https://github.com/derek-watson/jsUri
Manipulation de l'URI et de la chaîne de requête en javascript.
Ce projet intègre l'excellente bibliothèque d'expressions régulières parseUri de Steven Levithan. Vous pouvez analyser en toute sécurité des URL de toutes formes et tailles, aussi invalides ou hideuses soient-elles.
la source
Parfois, nous voyons
?
à la fin de l'URL, j'ai trouvé des solutions qui génèrent des résultatsfile.php?&foo=bar
. je suis venu avec ma propre solution fonctionne parfaitement comme je veux!Remarque: location.origin ne fonctionne pas dans IE, voici sa correction .
la source
La fonction suivante vous aidera à ajouter, mettre à jour et supprimer des paramètres vers ou depuis l'URL.
// exemple1et
// exemple2
// exemple3
// exemple4
// exemple5
Voici la fonction.
la source
C'était ma propre tentative, mais je vais utiliser la réponse d'Annakata car elle semble beaucoup plus propre:
De plus, j'ai trouvé ce plugin jQuery dans un autre article sur stackoverflow, et si vous avez besoin de plus de flexibilité, vous pouvez l'utiliser: http://plugins.jquery.com/project/query-object
Je pense que le code serait (n'a pas été testé):
la source
Ajout à la réponse de @ Vianney https://stackoverflow.com/a/44160941/6609678
Nous pouvons importer le module URL intégré dans le nœud comme suit
Exemple:
Liens utiles:
https://developer.mozilla.org/en-US/docs/Web/API/URL https://developer.mozilla.org/en/docs/Web/API/URLSearchParams
la source
Essaye ça.
la source
url.searchParams
est la liste des paramètres pré-initialisés pour cetURL
objet.J'aime la réponse de Mehmet Fatih Yıldız même s'il n'a pas répondu à toute la question.
Dans la même ligne que sa réponse, j'utilise ce code:
"Il ne contrôle pas l'existence des paramètres et ne modifie pas la valeur existante. Il ajoute votre paramètre à la fin"
et le testeur:
la source
J'irais avec cette petite mais complète bibliothèque pour gérer les URL en js:
https://github.com/Mikhus/jsurl
la source
C'est ce que j'utilise quand il s'agit de quelques ajouts ou mises à jour de paramètres d'URL de base côté serveur comme Node.js.
CoffeScript:
JavaScript:
la source
La solution la plus simple, fonctionne si vous avez déjà une balise ou non, et la supprime automatiquement afin qu'elle ne continue pas à ajouter des balises égales, amusez-vous
PUIS
la source
La réponse de Vianney Bajart est correcte; cependant, l' URL ne fonctionnera que si vous avez l'URL complète avec le port, l'hôte, le chemin et la requête:
Et URLSearchParams ne fonctionnera que si vous passez uniquement la chaîne de requête:
Si vous avez une URL incomplète ou relative et que vous ne vous souciez pas de l'URL de base, vous pouvez simplement vous séparer
?
pour obtenir la chaîne de requête et rejoindre plus tard comme ceci:Non compatible avec Internet Explorer.
la source
var u = new URL(window.location), usp = u.searchParams;
vous n'avez pas à utiliser de partage de chaîne sophistiqué.setUrlParams('https://example.com?foo=thing???&bar=baz', 'baz', 'qux') => "https://example.com?foo=thing&baz=qux???&bar=baz"
Si vous vous amusez avec des URL dans des liens ou ailleurs, vous devrez peut-être également prendre en compte le hachage. Voici une solution assez simple à comprendre. Probablement pas le PLUS RAPIDE car il utilise une expression régulière ... mais dans 99,999% des cas, la différence n'a vraiment pas d'importance!
la source
La solution la plus simple à laquelle je peux penser est cette méthode, qui retournera l'URI modifié. J'ai l'impression que la plupart d'entre vous travaillent trop dur.
la source
Ok ici je compare deux fonctions, une faite par moi-même (regExp) et une autre faite par (annakata).
Tableau divisé:
Méthode d'expression régulière:
Cas de test:
Il semble que même avec la solution la plus simple (lorsque l'expression rationnelle utilise uniquement le test et n'entre pas la fonction .replace), elle est toujours plus lente que le fractionnement ... Eh bien. Regexp est un peu lent mais ... euh ...
la source
Voici ce que je fais. En utilisant ma fonction editParams (), vous pouvez ajouter, supprimer ou modifier n'importe quel paramètre, puis utiliser la fonction intégrée replaceState () pour mettre à jour l'URL:
la source
Du mieux que je puisse dire, aucune des réponses ci-dessus ne répond au cas où la chaîne de requête contient des paramètres qui sont eux-mêmes un tableau et par conséquent apparaîtront plus d'une fois, par exemple:
La fonction suivante est ce que j'ai écrit pour mettre à jour
document.location.search
. Il prend un tableau de tableaux de paires clé / valeur comme argument et il retournera une version révisée de ce dernier avec laquelle vous pourrez faire ce que vous voudrez. Je l'utilise comme ceci:Si l'URL actuelle était:
http://example.com/index.php?test=replaceme&sizes[]=XL
Cela vous amènerait
http://example.com/index.php?test=123&sizes[]=XL&sizes[]=XXL&best=456
Fonction
la source
Essayez
Les expressions régulières, si lentes, donc:
Exemple:
la source
Avec les nouvelles réalisations de JS, voici comment ajouter un paramètre de requête à l'URL:
Voir également cette possibilité Moziila URLSearchParams.append ()
la source
Cela fonctionnera dans tous les navigateurs modernes.
la source
Réinitialiser toute la chaîne de requête
la source