【问题标题】:Using a Javascript Variable & Sending to JSON使用 Javascript 变量并发送到 JSON
【发布时间】:2011-02-01 21:01:00
【问题描述】:

我正在尝试获取 URL 的哈希值,通过函数发送它,将该值转换为对象,但最终将值发送到 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(比如 product:3,confirmed:1)返回为 {"product":3,"confirmed":1}

【问题讨论】:

  • 为什么不手动构建 json。
  • 这是为什么库/框架编写的?
  • @James Black:我正在尝试使脚本尽可能灵活,因此没有我们知道预定义的实际值。 @harto:原型

标签: javascript json hash object


【解决方案1】:

toJSON() 的典型实现需要一个数组或一个对象作为最顶层的元素。像这样的 Sonsomethig 可能会起作用:

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

【讨论】:

    【解决方案2】:

    首先,原生 JSON 支持和 toJSON方法并非在所有浏览器中都可用。 IE 6/7 或 Firefox 2/3 等较旧的浏览器不支持它。您应该使用像 Douglas Crockford 的 json2 这样的 JSON 库。其次,我建议使用全局JSON 对象的stringify 方法而不是toJSON 函数。在我的测试中

    JSON.stringify("...")
    

    工作得很好。

    【讨论】:

      【解决方案3】:

      如果有人还在寻找我的答案,这就是解决方案!

      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+"}";
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-21
        • 1970-01-01
        相关资源
        最近更新 更多