2 sosomatter sosomatter 于 2014.09.30 22:34 提问

关于callback(eval('('+xhr.responseText+')'));IE报错的问题

//这是index.js的文件
(function() {
var li = function(id) {
return document.getElementById(id);
};

li.init = function() {// li下的init方法
    // 创建一个ajax对象并返回
    try {
        return new XMLHttpRequest();
    } catch (e) {
        // null
    }
    try {
        return new ActiveXObject('Microsoft.XMLHTTP');
    } catch (e) {
        // null
    }
    alert('浏览器不支持ajax!')
    return;

};

li.get = function(url, data, callback, type) {
    // 以get形式发送ajax
    var xhr = li.init();
    if (data != null) {
        url = url + '?' + data;
    }
    xhr.open('get', url);
    xhr.setRequestHeader("if-Modified-Since", "0");// 去除get缓存
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            if (type == null) {
                type = 'text';
            }
            if (type == 'text') {
                callback(xhr.responseText);
            }
            if (type == 'xml') {
                callback(xhr.responseXML);
            }
            if (type == 'json') {
                callback(eval('(' + xhr.responseText + ')'));
            }
        }
    };
    xhr.send(null);
};

li.post = function(url, data, callback, type) {
    // 以post形式发送ajax
    var xhr = li.init();
    xhr.open('post', url);
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            if (type == null) {
                type = 'text';
            }
            if (type == 'text') {
                callback(xhr.responseText);
            }
            if (type == 'xml') {
                callback(xhr.responseXML);
            }
            if (type == 'json') {
                callback(eval('('+xhr.responseText+')'));//这个地方出错。
            }
        }
    };

    xhr.send(data);
};

li.addEvent=function(id,name,callback){

}


window.$ = li;// 等于创建一个全局名为$的变量

})();

//在callback(eval('('+xhr.responseText+')'));这个地方IE报错,

我的json传值的格式是:
Array[{"id":"3","sendId":"1","destId":"0","content":"","mtime":"2014-09-27
21:49:39","name":"admin"},{"id":"4","sendId":"1","destId":"0","content":"ddddddddddddd","mtime":"2014-09-27
21:50:50","name":"admin"},{"id":"5","sendId":"1","destId":"0","content":"dddddddddddddddddddddddddddddddd","mtime":"2014-09-27
21:50:57","name":"admin"},{"id":"6","sendId":"1","destId":"0","content":"dwwwwwwwwwadadawdawda","mtime":"2014-09-27
21:51:04","name":"admin"},{"id":"7","sendId":"1","destId":"0","content":"wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww","mtime":"2014-09-27
21:51:24","name":"admin"},{"id":"8","sendId":"1","destId":"0","content":"dddddddddddddddddddwdwd","mtime":"2014-09-27
21:51:31","name":"admin"},{"id":"9","sendId":"1","destId":"0","content":"dddddddddddddddddddddddddd","mtime":"2014-09-28
21:24:19","name":"admin"},{"id":"10","sendId":"1","destId":"0","content":"dddddddddddd","mtime":"2014-09-28
22:26:05","name":"admin"},{"id":"11","sendId":"1","destId":"0","content":"ddddd","mtime":"2014-09-29
22:07:41","name":"admin"}]

不知道是哪错了,请大神解答。。。

2个回答

showbo
showbo   Ds   Rxr 2014.11.19 10:37

去掉Array,要不eval后得到的返回为undefined,你的callback调用后就会出错

baidu_35140466
baidu_35140466   2016.05.27 17:53

请问楼主的问题解决了么 我在自学中 也是这个错误 代码基本跟你一样的也是这行代码一直报语法错误

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【JavaScript】原生JS请求后台数据,兼容IE 6 及其以下版本
原生JS请求后台数据,兼容IE 6 及其以下版本
低版本ie不支持eval方法的解决
var dt=eval(msg);改变为  var dt = jQuery.parseJSON(msg); 即可
使用Vuex, IE浏览器报错
解决方法 第一步: 安装 babel-polyfill 。 babel-polyfill可以模拟ES6使用的环境,可以使用ES6的所有新方法 npm install --save babel-polyfill 第二步: 在 Webpack/Browserify/Node中使用 在webpack.config.js文件中,使用 module.exports = { entry: {
Eval函数解决字符串JS在IE下不执行的问题
今天对项目进行测试的时候发现一个很有趣的问题,跟大家分享下。首先说下做的是个什么样的功能,废话不多说上图: 这是一个简单的表单数据 从第二章图片可以看出来,这个实体是可以在一个页面添加多个的。 对于一个页面添加多条数据,以及对数据的处理,后台代码等功能都比较简单,这里我就直接跳过。下面说说我遇到的问题: 我在做图片上传的时候,每一个图片的div里面初始化了一段JS,在第二个用JS输出
eval()的使用和兼容性问题
第四棒东雄平 2016-11-05 22:29 eval()的使用 eval() 函数可将字符串转换为代码执行,并返回一个或多个值 eval调用时,实例为eval( "( javascript代码 )" ) eval()的返回值 eval()的返回值遵循以下规则: 1.如果eval()的参数不是字符串,那么eval()将直接返回参数。 2.如果eval()的参数是字符串,那么
ie7,8下__flash__addCallback报错原因及解决方案
原文链接:
window[ "eval" ].call( window, data ); 语法错误
在IE浏览器中js报这个错,其实只要将js中所写的注释去掉就可以了。
ajax中eval()解析函数(json反馈值)报错(ie下提示object error,chrome下提示SyntaxError:Unexcepted indentifer)
一个web项目中刚遇到如是问题,ajax取出的数据无法显示。js中通过ajax异步从后台取出数据,发现在eval()这一步发生异常。 try catch显示的异常是时:ie下提示object error,chrome下提示SyntaxError:Unexcepted indentifer)。 百思不得其解,最后发现时后台从数据库中取出的字段还有特殊字符。问题就出在这个上边存放在js
解决js eval() 缺少';'
将eval(json)改成eval('('+json+')')
【Ajax】[bug] 页面 eval() 处理 Json 数据报错
记录两个开发的时候碰到的问题 1. 在页面使用 Jquery 的 Ajax eval() 方法处理返回数据时,网页控制台一直在报错  Uncaught SyntaxError: Unexpected token 因为 eval() 方法是把 ajax 异步返回的 json 数据转换成 Json 对象的,在调用 eval() 方法时报错,极有可能就是 json 的数据格式出了问题。 通