2013-10-15 4 views
0

У меня есть следующий URL:Jquery чтения нескольких параметров массива из URL

http://mydomain/Forwards?searchValue[]=Nike+Webstore&searchValue[]=Bodyman&category_filter[]=Animals+%26+Pet+Supplies&category_filter[]=Fashion&country_filter[]=Aland+Islands&country_filter[]=American+Samoa 

Этот URL содержит много paramters, которые передаются в виде массива:

Сейчас я хочу, чтобы каждый отдельный массив и его значение из

в приведенном выше примере результат должен быть что-то вроде этого:

searchValue = array(
[0] = 'Nike Webstore' 
[1] = 'Bodyman' 
); 

category_filter = array(
[0] = 'Animals & Pet Supplies' 
[1] = 'Fashion' 
); 

country_filter = array(
[0] = 'Aland Islands' 
[1] = 'American Samoa' 
); 

Можно ли это сделать, и если да, то как? я попытался со следующим:

decodeURIComponent(
    (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1] 

Однако это только вернуло 1 значение (Nike Webstore) в моем примере.

+0

я просто сделал быстрый код, который делает то, что вы пытаетесь сделать .... но я не тестировал его. Попробуйте изменить переменную «url» и посмотреть, работает ли она ... вот ссылка ... http://jsbin.com/UYILAzU/2/ Редактировать? js, console –

+0

@PsychHalf il проверить, что он зависает: D – Marc

+0

хорошо .. так как прошел тест? –

ответ

2

в качестве параметров массив. Приведенный ниже код будет работать нормально ..

// our test url 
var url ="http://mydomain/Forwards?searchValue[]=Nike+Webstore&searchValue[]=Bodyman&category_filter[]=Animals+%26+Pet+Supplies&category_filter[]=Fashion&country_filter[]=Aland+Islands&country_filter[]=American+Samoa" ; 
// filtering the string.. 
var paramsList = url.slice(url.indexOf("?")+1,url.length) ; 
var filteredList = paramsList.split("&") ; 

// an object to store arrays 
var objArr = {} ; 

// the below loop is obvious... we just remove the [] and +.. and split into pair of key and value.. and store as an array... 
for (var i=0, l=filteredList.length; i <l; i +=1) { 
    var param = decodeURIComponent(filteredList[i].replace("[]","")).replace(/\+/g," ") ; 
    var pair = param.split("=") ; 
    if(!objArr[pair[0]]) { objArr[pair[0]] = [] ;} 
    objArr[pair[0]].push(pair[1]); 
} 

console.log(objArr); 

который даст нам ....

[object Object] { 
    category_filter: ["Animals & Pet Supplies", "Fashion"], 
    country_filter: ["Aland Islands", "American Samoa"], 
    searchValue: ["Nike Webstore", "Bodyman"] 
} 

надеюсь, что это помогает ..: D

1

Постарайтесь, чтобы увидеть, если эта схема работает для вас

(?:\?|&)(.+?)=([A-Z+%0-9]+) 

Example here

Смежные вопросы