2010-11-28 3 views
20

мне нужно сделать массив Javascript из URL, например:сделать массив JavaScript из URL

очередь это:

http://maps.google.com/maps/api/staticmap?center=Baker Street 221b, London&size=450x450&markers=Baker Street 221b, London&sensor=false 

В чем-то вроде:

array['center'] = Baker Street 221b, London 
array['size'] = 450x450 
// and so on... 

мне нужно сделать эта serializion/unserialization работает в обоих направлениях (url для массива и массива для части URL-адреса). Есть ли встроенные функции, которые это делают?

Заранее благодарен!

+0

Возможные дубликат: http://stackoverflow.com/questions/2090551/parse-query-string-in-javascript Это другой вопрос не обсуждается сериализация (только десериализация). – strager 2010-11-28 16:32:28

+1

Это не массив ** **, это ** объект ** со свойствами. Нотация правильная, но терминология отключена, другими словами. – Pointy 2010-11-28 16:44:19

ответ

40

URL в массив: (адаптировано из my answer here)

function URLToArray(url) { 
    var request = {}; 
    var pairs = url.substring(url.indexOf('?') + 1).split('&'); 
    for (var i = 0; i < pairs.length; i++) { 
     if(!pairs[i]) 
      continue; 
     var pair = pairs[i].split('='); 
     request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); 
    } 
    return request; 
} 

Массив для URL:

function ArrayToURL(array) { 
    var pairs = []; 
    for (var key in array) 
    if (array.hasOwnProperty(key)) 

     pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(array[key])); 
    return pairs.join('&'); 
} 
2

выше функция URLToArray не работает, когда строка URL-адрес имеет elem [] = 23 & elem [] = 56 .. см. ниже адаптированная функция ... надеюсь, что она работает - не 100% испытания

function URLToArray(url) { 
     var request = {}; 
     var arr = []; 
     var pairs = url.substring(url.indexOf('?') + 1).split('&'); 
     for (var i = 0; i < pairs.length; i++) { 
      var pair = pairs[i].split('='); 

      //check we have an array here - add array numeric indexes so the key elem[] is not identical. 
      if(endsWith(decodeURIComponent(pair[0]), '[]')) { 
       var arrName = decodeURIComponent(pair[0]).substring(0, decodeURIComponent(pair[0]).length - 2); 
       if(!(arrName in arr)) { 
        arr.push(arrName); 
        arr[arrName] = []; 
       } 

       arr[arrName].push(decodeURIComponent(pair[1])); 
       request[arrName] = arr[arrName]; 
      } else { 
      request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); 
      } 
     } 
     return request; 
    } 

где ENDWITH берется из here

function endsWith(str, suffix) { 
    return str.indexOf(suffix, str.length - suffix.length) !== -1; 
} 
Смежные вопросы