2016-12-20 6 views
0

Я использую следующий код, чтобы получить параметры запроса для поиска в javascript. Есть ли какая-то особая причина, почему это не сможет обрабатывать несколько параметров? Кажется, у меня проблемы с ее внедрением.Получение двух параметров строки запроса

var params = [], hash; 
var q = document.URL.split('?')[1]; 
if(q != undefined){ 
    q = q.split('&'); 
    for(var i = 0; i < q.length; i++){ 
     hash = q[i].split('='); 
     params.push(hash[1]); 
     params[hash[0]] = hash[1]; 
    } 
} 
+0

Что вы имеете в виду множественным? Каков пример URL-адреса, который не будет работать? – epascarello

+0

@epascarello he означает example.com/index.html?param1=foo¶m2=data –

+0

@LeoWilson понял это правильно. –

ответ

1

Вы можете использовать регулярное выражение для получения параметров.

var test = 'example.com/index.html?param1=foo&param2=data#icouldhaveahashtoo'; 
 
var params = {}; 
 

 
test.replace(/[?&]([^=]+)[=]([^&#]+)/g, function(match, key, value){ 
 
    params[key] = value; 
 
    return ''; 
 
}); 
 

 
console.log(params);

+0

Если вы замените значение test w/document.URL, это будет идеальным решением. –

+0

@LeoWilson Я сделал это, и это сработало отлично. Спасибо! –

+0

Обязательный xkcd: https://xkcd.com/1171/ – Hatchet

-1

Кажется, что ваш код работает отлично, однако, он не будет работать должным образом с URL, с параметрами запроса, присвоенных более одного значения (например, http://example.com/page.php?param=foo&param=bar). Кроме того, если одно из имен параметров строки запроса равно length или что-то, что может сделать плохие вещи в массиве params - возможно, лучше попробовать другой контейнер.

var params = [], hash; 
var q = 'example.com/index.html?param1=foo&param2=data'.split('?')[1]; 
if(q != undefined){ 
    q = q.split('&'); 
    for(var i = 0; i < q.length; i++){ 
     hash = q[i].split('='); 
     params.push(hash[1]); 
     params[hash[0]] = hash[1]; 
    } 
} 

console.dir(params); // Array[2] 0: "foo" 1: "data" length: 2 param1: "foo" param2: "data" __proto__: Array[0] 

Я хотел бы предложить, имея переменную params быть объектом, и пропустить строку params.push(hash[1]), потому что вы можете перебрать свойства, используя for..in петлю достаточно легко, и порядок параметров не должен» так или иначе. Если для параметра определенного имени имеется более одного значения, тогда значение этого параметра будет массивом. Например, ?param=foo&param=bar в конечном итоге анализируется как { param: ["foo", "bar"] }.

+0

Не могли бы вы предложить некоторые улучшения? –

+0

@SteveHalla Вы упомянули, что вам не удалось выполнить код. Это поможет, если вы сможете углубиться в более подробные сведения, иначе мы все схватимся за соломинку. – Hatchet

+0

@SteveHalla смотреть редактирование. – Hatchet

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