js里面eval这方法怎么用的呀

HelloBitches 2014-07-02 09:42:13
我是新人,跟一个教程学的
...全文
660 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
json字符串是以{开始,}结束的。在javascript会当成一个语句执行。所以要加上(),告诉javascript这是一个表达式,这样eval才会强制性的把json字符串转为json对象。 你哪个教程里的eval可能是经过封装后的,直接用的话会报错的。
save4me 2014-07-02
  • 打赏
  • 举报
回复
还有一种方法是使用new Function 具体的看一下: Eval函数和new function方式解析Json对象

(new Function('','return '+data))();
引用 5 楼 qq317423553 的回复:
引用 3 楼 save4me 的回复:
改成

var obj = eval('('+data+')');
因为返回的data有{},会被认为是代码块,就出错了,你在IE按F12打开开发者工具里面的控制台,就能看到。出错了,就停止执行,所以你看不到任何东西弹出来。
引用 1 楼 qq317423553 的回复:
改成这样后页面什么东西都弹不出来了
刚在一个群里问也说没必要用eval那这种情况该怎么写呢
肖志军 2014-07-02
  • 打赏
  • 举报
回复
eval里面其实执行的时js代码,里面的字符串代码。你要转json的话是这么赚的var json=eval('('+data+')');
HelloBitches 2014-07-02
  • 打赏
  • 举报
回复
引用 3 楼 save4me 的回复:
改成

var obj = eval('('+data+')');
因为返回的data有{},会被认为是代码块,就出错了,你在IE按F12打开开发者工具里面的控制台,就能看到。出错了,就停止执行,所以你看不到任何东西弹出来。
引用 1 楼 qq317423553 的回复:
改成这样后页面什么东西都弹不出来了
刚在一个群里问也说没必要用eval那这种情况该怎么写呢
HelloBitches 2014-07-02
  • 打赏
  • 举报
回复
引用 2 楼 fangmingshijie 的回复:
eval这个函数是用来计算,或者执行里面的javascript代码。 你可以用 try { eval(data); }catch(exception) { alert(exception); } 看看返回的什么错误,你的data是个json字符串,显然用eval是无意义的,而且会报异常,一般是eval("("+data+")");把json字符串转为json对象[object Object].
按照你的方法现在正常了,我是新人,跟一个教程学的,你看这是那个教程写的代码
function getInfo() {
    //1。向服务器发起请求,获取数据
    $.get("GetStockInfo", null, function(data) {
        //2.接收并解析数据
        obj = eval(data);
        //2.1获取两只股票的当前指数信息
        var szzs = obj["300001"];  //obj.300001
        var pfyh = obj["000001"];
        /*
         遍历一个js的对象
         for (var stockid in obj) {
            var stock = obj[stockid];
         }
         */
        //2.2找到页面中对应的节点,然后填充最新的股票价格
        var span3 = $("#300001").children("span");
        span3.html(szzs.now);
        if (szzs.now > szzs.yes) {
            //当前价格大于昨天收盘,则显示红色
            span3.css("color","red");
        } else {
            span3.css("color","green");
        }
        var span1 = $("#000001").children("span");
        span1.html(pfyh.now);
        if (pfyh.now > pfyh.yes) {
            //当前价格大于昨天收盘,则显示红色
            span1.css("color","red");
        } else {
            span1.css("color","green");
        }
        updatediv();
    })    
}
后台的代码:
//采用json的数据格式返回股票的信息
        StringBuilder builder = new StringBuilder();
        //采用数组的方式回传两个股票对象
        /*
        builder.append("[{name:\"").append(szzs.getName()).append("\",id:\"").append(szzs.getId())
                .append("\",yes:").append(szzs.getYesterday()).append(",tod:").append(szzs.getToday())
                .append(",now:").append(szzs.getNow())
                .append("},")
                .append("{name:\"").append(pfyh.getName()).append("\",id:\"").append(pfyh.getId())
                .append("\",yes:").append(pfyh.getYesterday()).append(",tod:").append(pfyh.getToday())
                .append(",now:").append(pfyh.getNow())
                .append("}]");
        */
        //采用对象的方式回传两个股票对象
        builder.append("{")
                .append("\"").append(szzs.getId()).append("\":{name:\"").append(szzs.getName())
                .append("\",yes:").append(szzs.getYesterday()).append(",tod:").append(szzs.getToday())
                .append(",now:").append(szzs.getNow())
                .append("},")
                .append("\"").append(pfyh.getId()).append("\":{name:\"").append(pfyh.getName())
                .append("\",yes:").append(pfyh.getYesterday()).append(",tod:").append(pfyh.getToday())
                .append(",now:").append(pfyh.getNow())
                .append("}}");
        out.println(builder);
他这样写结果也是正常的,你能看下为什么吗
save4me 2014-07-02
  • 打赏
  • 举报
回复
改成

var obj = eval('('+data+')');
因为返回的data有{},会被认为是代码块,就出错了,你在IE按F12打开开发者工具里面的控制台,就能看到。出错了,就停止执行,所以你看不到任何东西弹出来。
引用 1 楼 qq317423553 的回复:
改成这样后页面什么东西都弹不出来了
  • 打赏
  • 举报
回复
eval这个函数是用来计算,或者执行里面的javascript代码。 你可以用 try { eval(data); }catch(exception) { alert(exception); } 看看返回的什么错误,你的data是个json字符串,显然用eval是无意义的,而且会报异常,一般是eval("("+data+")");把json字符串转为json对象[object Object].
HelloBitches 2014-07-02
  • 打赏
  • 举报
回复
改成这样后页面什么东西都弹不出来了

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧