2011-08-23 2 views
1

j'ai un problème pour obtenir toute la requête de l'URL en utilisant la fonction toQueryParams du cadre de protoypejs eG:Obtenir toute la requête de l'URL

var a = "http://anypage.com?a=lol&b=lal&c=laoa?&d=fehw#lalalalalSomeAnchor"; 

a.toQueryParams(); 

>> {d: 'fehw'} 

what i want to get: 

>> {a: 'lol', b: 'lal', c: 'loaa?', d: 'fehw'} 

je sais que url est invalide, mais je veux prétraiter que url pour échapper à ses valeurs avant de l'envoyer au serveur.

J'ai essayé de changer l'expression régulière de fonctions pour correspondre seulement aux caractères entre le premier? et le dernier #, j'ai déjà une expression/(\\\ ") qui fonctionnerait pour moi mais je veux même exclure le? et #, j'espère que quelqu'un d'entre vous peut m'aider :)

btw. cette page ci-dessous est de construire regexp impressionnant en temps réel: P http://regexpal.com/

Mise à jour: grâce à DaveRandom :) pour ceux qui veulent résoudre ce problème directement dans la ligne suivante framwork remplacer par:

L625: var match = this.strip().match(/\?([^#]*)/); // (/([^?#]*)(#.*)?$/); default 

Répondre

1

Que diriez-vous de cela ... /\?([^#]*)/?

Vous ne devriez pas avoir à vous soucier de correspondre à la « dernière » # parce que l'ancre commence à la première #, donc même s'il y a plus d'un # dans la chaîne, quoi que ce soit après la première occurence ne fait pas partie de la chaîne de requête.

+0

Je ne suis pas sûr, mais il ne semble pas fonctionner soit: http://jsfiddle.net/pimvdb/rWE62 /. Le prototype semble lire tout après le dernier '?'. – pimvdb

+1

Vous devez encoder vos variables URL. Utilisez encodeURIComponent ("value"); avant de l'ajouter à votre URL. –

+0

Ce qui précède fonctionne pour moi (me donne '' a = lol & b = lal & c = laoa? & D = fehw' qui est ce qui est nécessaire, n'est-ce pas?), Avec la mise en garde que la chaîne Cela, je crois qu'il est impossible d'éviter avec cette opération (bien que je puisse me tromper, quelqu'un s'il vous plaît corrigez-moi s'ils savent le contraire). Vous pouvez toujours 'substr()' le premier '?' Off. – DaveRandom

0

L'utilisateur /\?([^#]*)/ comme DaveRandom a répondu, et n'oubliez pas d'URL Encoder vos variables. Utilisez encodeURIComponent("value"); avant de l'ajouter à votre url. ..Ne peut avoir deux ? dans votre URL.

+0

le deuxième match ne comprend pas le? et # – Maertz

0

Ici, cela fonctionne .... Je viens de prendre tout entre le premier ? et le dernier #, concaténé et exécuté toQueryParams dessus. Peut-être que c'est assez bon?

http://jsfiddle.net/cQYV7/1/

modifier remplacé également tous les ?& avec ? si tous les paramètres sont adaptés ...

+0

Non je ne veux pas perdre de données, le remplacement est mauvais dans mon cas – Maertz

Questions connexes