Baijinwen的专栏

积累-〉顿悟-〉再积累-〉再顿悟.......

opensns在阿里云Linux虚拟主机运行时后台ajax错误

解决方法:

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,把它也禁了吧:































阅读更多
个人分类: PHP
想对作者说点什么? 我来说一句

Linux服务器运维/虚拟主机

-

学院

1970年01月01日 08:00

没有更多推荐了,返回首页

不良信息举报

opensns在阿里云Linux虚拟主机运行时后台ajax错误

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭