2010-03-29 118 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("...") 

工作得很好。