Comment ajouter un paramètre à l'URL?
Mon URL est: http://something.com/mobiles.php?brand=samsung
Désormais, lorsqu'un utilisateur clique sur un prix minimum de filtre (près de 300), je veux que mon URL pour devenir
http://something.com/mobiles.php?brand=samsung&priceMin=300
En d'autres termes, je suis à la recherche d'une fonction javascript qui va ajouter un paramètre spécifié dans l'URL et puis rediriger la page vers la nouvelle URL.
Remarque: Si aucun paramètre n'est fourni, alors la fonction doit ajouter ?
au lieu de &
c'est à dire si l'URL actuelle est http://something.com/mobiles.php
puis la page doit être re-dirigé vers http://something.com/mobiles.php?priceMin=300
au lieu de http://something.com/mobiles.php&priceMin=300
- Une raison quelconque vous ne pouvez pas générer le lien de serveur-côté ou de l'utilisation d'un formulaire en ligne?
- Je suis d'accord avec @zzzzBov, ensuite, vous pouvez transformer votre prix minimum de filtre dans une dynamique de lien.
- Il y a trop de filtres sur mon site web comme nom de marque, gamme de prix, trier par popularité tri par prix et de nombreuses autres. Pour générer l'URL sur le serveur a besoin d'un lot de
if-else
états et va générer de l'onu-nécessaire de la charge sur le serveur. Je suis spécifiquement à la recherche pour le changement d'URL à côté client. Merci! - si vous êtes à l'aide de PHP et que vous utilisez "beaucoup de
if-else
états", alors vous êtes en train de faire très mal. - Oui, c'est pourquoi j'ai posé la question. Je veux le faire sur le côté client. Je sais que l'utilisation de beaucoup de
if-else
n'est pas bon, mais pouvez-vous me dire pourquoi il n'est pas bon? - Vous ne devriez pas avoir besoin si-sinon... PHP dispose de fonctions conçues pour cela. Découvrez php.net/manual/en/function.http-build-query.php
- parce que vous pourriez être à l'aide de votre
$_GET
tableau pour remplir un formulaire en ligne avec les valeurs nécessaires que les champs cachés, ou vous pourriez créer une nouvelle requête avechttp_build_query
avec une copie de$_GET
où vous avez mis tout échéant, de nouveaux paramètres. Cette nouvelle requête peut être déversés dans un lien. - whatwg.org/specs/web-apps/current-work/multipage/... ; whatwg.org/specs/web-apps/current-work/multipage/...
Vous devez vous connecter pour publier un commentaire.
essayer quelque chose comme cela, il doit tenir compte aussi des cas où vous avez déjà ce paramètre dans l'url:
puis vous l'appelez comme dans votre cas:
mypriceMin
est déjà partie de l'emplacement.href, il peut être changé en tant que bien, afin de prendre soin le code est en fait travailler pour son but. En outre, l'expression régulière doit s'exécuter sur la recherche d'une partie seulement, de ne pas le terminer href.search
au lieu dehref
: essayer avectest.html?a=b#filter
- ajout de l'emplacement.href fait d'ajouter des paramètres, même à la mauvaise partie de l'emplacement.En fait, c'est totalement futile, parce que le javascript emplacement de l'objet de traite déjà avec cette. Juste encapsuler ce one-liner en fonction de la réutiliser avec des liens etc:
Il n'est pas nécessaire de vérifier les
?
comme c'est déjà lesearch
partie et vous avez seulement besoin d'ajouter le param.Si vous ne voulez pas même faire usage d'une fonction que vous pouvez écrire de la manière suivante:
Garder à l'esprit que ce est exactement ce que vous avez demandé: Pour ajouter ce paramètre spécifique. Il peut-être déjà partie de la
search
partie parce que vous pouvez avoir le même paramètre plus d'une fois dans une URI. Vous pourriez vouloir normaliser qu'au sein de votre application, mais c'est un autre domaine. Je voudrais centraliser URL-la normalisation dans une fonction propre.Edit:
Dans des discussions sur la a accepté la réponse ci-dessus, il est devenu clair, que les conditions suivantes doivent être remplies pour obtenir une fonction de fonctionnement:
Comme
search
prévoit déjà la chaîne de recherche, la seule chose qui reste à atteindre est d'analyser cette requête-info dans les paires nom-valeur, de modifier ou de compléter le nom et la valeur et l'ajouter ensuite àsearch
:Ce qui est un peu plus solide qu'il peut traiter avec des Url de ce type:
Ou encore:
En outre, le nom et la valeur sont toujours codé correctement. Où cela peut échouer si un nom de paramètre, les résultats illicites des biens js étiquette.
En cas
location.search === ""
, il n'est pas?
partie.Donc ajouter
?newpart
de sorte qu'il devient.php?newpart
.Sinon, il y a un
?
partie déjà.Donc ajouter
&newpart
de sorte qu'il devient.php?existingpart&newpart
.Grâce à hakre, vous pouvez aussi tout simplement la définir comme:
Il va automatiquement ajouter
?
si nécessaire (si ce n'est pas apparent, il sera?&newpart
cette manière, mais qui ne devrait pas d'importance).if
dans votre exemple, la même chose peut être fait parlocation.search += "&priceMin=300";
seulement.if
est-il à vraiment distinguer entre?
et&
.search
qui n'a pas besoin de mettre le?
si ce n'est pas déjà partie. Avec votre code, vous ne seriez même ajouter qu'il est derrière la table de hachage, la partie à la fin maintenant que je le vois, essayez avectest.html?a=b#filter
.location.search
a pu être défini. Merci.Je réécrire le corriger réponse en PHP:
J'espère que l'aide de quelqu'un...
Si vous êtes d'avoir à l'utilisateur de remplir un champ de texte avec un prix minimum, pourquoi ne pas laisser la forme de soumettre une demande avec un vide d'action? IIRC, que devrait faire tout ce que vous voulez, sans javascript.
utilisation
var urlString = window.location
pour obtenir l'urlvérifier si l'url contient déjà un '?' avec
urlString.indexOf('?')
, -1 signifie qu'il n'existent pas.ensemble
window.location
pour redirigerc'est comme 101 de javascript. essayez certains moteurs de recherche!