解决方法:
1. Application\Admin\Static\js\common.js 的 $('.ajax-post').click(function () {方法体里面的 $.post(target, query).success(function (data) { 成功代码里面, 添加以下代码,对返回信息进行过滤
var s_json = JSON.stringify(data); //把object转换成json字符串
s_json = s_json.replace(/\\n/g, ""); //去掉换行
s_json = s_json.replace(/\\r/g, ""); //去掉回车
s_json = s_json.replace(/\\\\u/g, "\\u"); //将反斜杠+双引号 变成 双引号
s_json = s_json.replace(/\\\"/g, "\""); //将反斜杠+双引号 变成 双引号
s_json = s_json.replace(/\\\\\//g, "\/"); //将两个反斜杠+斜杠 变成 斜杠
s_json = s_json.substring(1, s_json.length-1); //去掉第一个以及最后一个双引号
//alert(s_json);
data = JSON.parse(s_json); //把字符串转换成json对象
//alert(data.status + " " + data.info + " " + data.url);
2. ThinkPHP\Library\Think\Controller.class.php 的 dispatchJump 方法里面,将 ajax返回的 status修改为字符类型,因为JSON.parse对json格式是非常严格的
这是临时的解决方法,未深究,可能还有更好的方法。
--------------------------------------------------------------------------------------------------- 我是分隔线
上面并非解决方案,该问题的根源原来是thinkphp的Model产生的。
产生问题的Model:
没有问题的Model:
意外不意外,惊喜不惊喜,就是两个换行,就是两个换行,两个换行...
在你的Controller的初始化函数里面,假如你使用了
$this->productModel = D('Product/Product');
这样的代码,然后,在其他方法体里面使用ajaxReturn函数 或者 $this->success("xxx"); 或者 $this->error("xxx");的时候,它就连带$this->productModel里面的换行也一起给你
阿里云虚拟主机的magic_quotes_gpc,把它也禁了吧: