2010-03-29 91 views
1

我想要獲取URL的哈希值,通過函數發送它,將該值轉換爲對象,但最終將值發送給JSON。我有以下設置:使用Javascript變量&發送到JSON

function content(cur){ 
    var mycur = $H(cur); 
    var pars = "p="+mycur.toJSON(); 
    new Ajax.Updater('my_box', 'test.php', { 
     parameters: pars 
    }); 
} 

function update(){ 
    if(window.location.hash.length > 0){ 
     content(window.location.hash.substr(1)); // Everything after the '#' 
    } 
} 

var curHashVal = window.location.hash; 
window.onload = function(){ 
    setInterval(function(){ 
     if(curHashVal != window.location.hash){ 
      update(); 
      curHashVal = window.location.hash; 
     } 
     },1); 
    } 

但由於某種原因,我似乎無法得到正確的JSON輸出。它將作爲非常大的對象返回(1:「{」,2:「k」)或根本不返回。我懷疑這是不可能完成的,但我已經用盡了我能想到的大部分方法。

我試過的其他方法是「{」+ cur +「}」以及cur.toObject(),但是,似乎沒有任何工作完成。

感謝您的幫助!

編輯:作爲最終的結果,我想的URL(比如產品:3,證實:1)將被返回爲{"product":3,"confirmed":1}

+0

爲什麼不手動建立json。 – 2010-03-29 01:03:40

+0

這是爲什麼編寫的庫/框架? – harto 2010-03-29 01:20:47

+0

@詹姆斯布萊克:我試圖讓腳本儘可能靈活,所以沒有我們知道預定義的真實值。 @harto:Prototype – drfranks3 2010-03-29 01:27:45

回答

0

如果有人仍在尋找我的答案,這裏是解決方案!

function build_json(str){ 
    var new_str = "{"; 
    var cut = str.split(","); 
    for(var x=0; x < cut.length; x++){ 
     if(x > 0){new_str = new_str+",";} 
     var s = cut[x].split(":"); 
     new_str = new_str+"\""+s[0]+"\":\""+s[1]+"\""; 
    } 
    return new_str+"}"; 
} 
1

的toJSON()的一個典型的實施需要要麼Array或對象作爲最重要的元素。像這樣的Sonsomethig可能會工作:

var pars = {p:myCur}; pars = pars.toJSON();

0

首先本機JSON支持和toJSON方法不適用於所有瀏覽器。 IE 6/7或Firefox 2/3等老瀏覽器不支持它。你應該使用道格拉斯克羅克福德的json2這樣的JSON庫。其次我建議使用全局JSON對象的stringify方法,而不是toJSON函數。在我的測試中

JSON.stringify("...") 

工作得很好。