后来过来的json,不仅仅是数据模型。还包括一些前台处理的方式。比如json串位
{name:'xxxx', age:'xxxx', value:'xxxx'}
现在想在这里加入一个function的handler,比如
加入handle:function(){alert(1);}这样json里就包括name,age,value,handle,这个handle如何在后台生成json的文本串,前台从后台获得了这个串以后,又该如何来进行相应的解析操作。困惑中.....

解决方案 »

  1.   

    最好把操作数据转换成数据,比如用一些预定义的action code。也可以把整个函数都放到字符串里传回去,然后在前台eval,但是不建议。
      

  2.   

    不知道你们的业务是怎么的需要从后台传function
    不过貌似没有好的想法了
      

  3.   

    是啊,前台eval。
    不知道楼主这样做是不是在写代码生成工具,如果是的话,可以用freeer简单多了。
      

  4.   

    后台可以直接拼接字符串,也可以用JSONObject,前台用eval
      

  5.   

    后台Java脚本JSONObject json = new JSONObject();
    json.element("name","李明");
    json.element("age","20");
    json.element("value","11");
    json.element("handler","function(){alert(this.name)}");
    //这样生成JSON字符串就可以了前台JSvar data = eval("("+response.responseText+")");//拿到的JSON字符串
    var handler = data.handler;
    handler();就会弹出"李明"
      

  6.   


      typeof data.handler == 'function'
      

  7.   

    window.onload = function() {
      var resp = "{name:'bao110908', age:'5', value:'3', handle:function(){alert(1);}}";
      var json = eval('(' + resp + ')');
      if (json && typeof json.handle == 'function') {
        json.handle.call(json);
        // or
        // json.handle.apply(json);
      }  var resp = "{name:'bao110908', age:'5', value:'3', handle:function(a, b){alert(a + this.age + b);}}";
      var json = eval('(' + resp + ')');
      if (json && typeof json.handle == 'function') {
        json.handle.call(json, '我今年', '岁');
        // or
        // json.handle.apply(json, ['我今年', '岁']);
      }
    }
      

  8.   

    经 var json = eval('(' + jsonString + ')'); 出来的 json 就已经是 JSON 对象了,JavaScript 是原生支持 JSON 对象的,直接用 json.name 就可以调用其中的属性了。按你的代码,写了个例子,我想应该能看明白的:<script type="text/javascript">Object.prototype.toString = function() {
      var str = [];
      var k = 0;
      for(var n in this) {
        if(k++ > 0) str.push(', ');
        str.push(n);
        str.push(':');
        var x = this[n];
        if(typeof x == 'object') {
          str.push('{');
          str.push(this[n].toString());
          str.push('}');
        } else {
          str.push(this[n]);
        }
      }
      return str.join('');
    }window.onload = function() {
      var resp = "{name:'bao110908', age:'5', value:'3', obj: {x:1,y:2}, handle:function(){alert(1);}}";
      var json = eval('(' + resp + ')');
      var a = [];
      a.push('json.name');
      a.push('  ' + json.name);  a.push("json['name']");
      a.push('  ' + json['name']);  // 除了 json.name 之外,还可以这样 :P  a.push('json.age');
      a.push('  ' + json.age);  a.push('json.value');
      a.push('  ' + json.value);  a.push('json.obj');
      a.push('  ' + json.obj);  a.push('json.obj.x');
      a.push('  ' + json.obj.x);  a.push('json.obj.y');
      a.push('  ' + json.obj.y);  a.push('json.handle');
      a.push('  ' + json.handle);  a.push('json.toString()');
      a.push('  ' + json.toString());  alert(a.join('\n'));
    }
    </script>