2015-03-11 2 views
0

Итак, у меня есть функции для превращения строки в объект и объект в строку, однако мне нужно учитывать исключение, и я не уверен, как это сделать. Позвольте мне показать вам, что у меня естьjavascript, исключение для манипуляции с строкой/объектом

 parseObjectToUrl: function (obj){ 
      var myStr = ""; 
      var first_iteration = true; 
      for (var p in obj) { 

       if(first_iteration){ 
        myStr += p + "="; 
        first_iteration = false; 
       }else{ 
        myStr += "&" + p + "="; 
       } 

       tObj = obj[p]; 
       var first_inner = true; 
       for(t in tObj){ 
        if(first_inner){ 
         myStr += t; 
         first_inner = false; 
         }else{ 
         myStr += "," + t; 
         } 

         yObj = tObj[t]; 
         for(y in yObj){ 
          myStr += "/" + yObj[y]; 
         } 
       } 
      } 
      return myStr; 
     }, 
     parseObjectFromUrl : function(url){ 
      var builtObj = {}; 
      //remove first slash 
      url = url.slice(0, 0) + url.slice(1); 
      var ch = url.split('&'); 
      var tempParent = {}; 
      for (var p in ch) { 

       var tempSub = {}; 
       var arr = ch[p].split('='); 
       var keyParent = arr[0]; 
       var splitInside = arr[1].split(","); 

       for (var i in splitInside) { 
        var sub = splitInside[i].split('/'); 
        var subKey = sub[0]; 
        tempSub[subKey] = sub.slice(1); 

       } 
       tempParent[keyParent] = tempSub; 
      } 
      return tempParent 
     } 

Так что это строка выглядит

/module1=mod1/2/3/4,mod2/2/3/4&module2=mod2/3/4/5 

и выглядит объект

myObj = 
{ 
module1 : { mod1 : [2,3,4] , mod2 [2,3,4]} , 
module2 : { mod2 : [3,4,5]} 

}

Таким образом, эти функции прекрасно работают мне, однако, я (к сожалению) должен иметь возможность обрабатывать случай, когда пользователь добавляет «/» в такие параметры, как -

myObj = 
{ 
module1 : { mod1 : [2/,3/,4/] , mod2 [2,3,4]} , 
module2 : { mod2 : [3,4,5]} 

}

Я уверен, что он собирается бросить ключ в моей функции, потому что я Расщепление из-за «/», так что я не знаю, как это обойти. Удастся ли мне слэш? Как это будет вписываться в функции, если это так? Ищите любые советы по этому вопросу. Благодаря!

Edit:

Я был в состоянии кодировать сбежавшего URL, как:

obj.replace(/([/-])/g, "%2F"); 

беглому URL, hoever У меня возникают проблемы, делая обратное этому. вот моя попытка.

obj.replace(/(%2F)/g, "/"); 
+1

_ «функции, чтобы превратить строку в объект и объект в строку» _ - для какой цели? Что вы пытаетесь достичь с этим в конце концов? Вы пытаетесь создать «JSON бедняка» здесь ...? – CBroe

+0

@CBroe настраиваемая система маршрутизации для хранения состояния через URL-адрес, чтобы пользователь мог скопировать/вставить/пометить URL-адрес, который сохранит состояния по нескольким отдельным модулям (угловым) –

+1

Ну, вы можете попробовать и кодировать косу черт, я полагаю ... – CBroe

ответ

0

на мой взгляд, было бы лучше использовать URL-адреса массивов, но имейте в виду символы для вашего URL может быть ограничено:

maximum length of HTTP GET request?

, сказал, что один мог бы сделать что-то подобное :

module1[]=1&module1[]=2&module2[]=4&module2[]=3 

это равно следующий псевдокод:

$_GET["module1"] = array(1,2); 
$_GET["module2"] = array(4,3); 

и использование encodeURIComponent & decodeURIComponent для значений

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

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