Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > GET переменные из адресной строки


Автор: arbuzzz 14.10.2007, 13:58
Подскажите, как вытащить из адресной строки браузера переменные, которые получены через GET?
То есть, например, из строки 
Код

http://localhost/polfarm/url_test.html?val1=sample1&val2=sample2

вытащить переменные val1 и val2 для дальнеёшего использования их в скрипте?
Знаю, что вытаскивается регулярками, но вот не дружу я сними.

Автор: xamloru 14.10.2007, 16:29
Код

function getvars(){
  var get_str=document.location.href;
  var i=get_str.indexOf('?');
  if(i==-1){
    return false;
  }else{
    get_str=get_str.substr(i+1);
    var vals=get_str.split('&');
    var n=vals.length;
    for(i=0;i<n;i++){
      vals[i]=vals[i].split('=');
    }
    return vals;
  }
}

никаких регекспов не используется.
функция вернет массив типа:
Array(Array('val1','sample1'),Array('val2','sample2'))

Автор: SelenIT 14.10.2007, 20:04
А зачем искать "вопросик" в location.href, если есть готовый location.search? smile
И возвращать, имхо, лучше хеш, а не двумерный массив. Например, так (а-ля PHP;):
Код

var _GET = (function() {
    var pairs = window.location.search.substr(1).split('&'), get = {};
    for (var i=0; pairs[i]; i++) {
        var pair = pairs[i].split('=');
        get[pair[0]] = unescape(pair[1] || '');
    }
    return get;
})();

// пусть GET-строка имеет вид ...?a=long%20phrase&b=12345&rest
alert ('a="'+_GET['a']+'",\nb="'+_GET['b']+'",\nrest="'+_GET['rest']+'"');


UPD: еще более PHP-образный вариант функции, преобразует переменные вида a[]=xxx&a[]=yyy в хеши, подобные PHP-шным массивам. Если индексы в скобках есть, они используются, если нет - генерируются номера. Понадобилась одна регулярка:
Код

function() {
   var pairs = window.location.search.substr(1).split('&'), get = {}, m;
   for (var i=0; pairs[i]; i++) {
      var pair = pairs[i].split('=');
      if (m = pair[0].match(/(.+?)\[(.*)\]/)) {
          if (!get[m[1]]) {
              get[m[1]] = {};
              get[m[1]].length = 0;
          }
          get[m[1]][(m[2] || get[m[1]].length++)] = unescape(pair[1] || '');
      }
      else get[pair[0]] = unescape(pair[1] || '');
   }
   return get;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)