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);


opensns在阿里云Linux虚拟主机运行时后台ajax错误_第1张图片



2.    ThinkPHP\Library\Think\Controller.class.php   的    dispatchJump   方法里面,将 ajax返回的 status修改为字符类型,因为JSON.parse对json格式是非常严格的

opensns在阿里云Linux虚拟主机运行时后台ajax错误_第2张图片


这是临时的解决方法,未深究,可能还有更好的方法。


--------------------------------------------------------------------------------------------------- 我是分隔线


上面并非解决方案,该问题的根源原来是thinkphp的Model产生的。

产生问题的Model:

opensns在阿里云Linux虚拟主机运行时后台ajax错误_第3张图片

没有问题的Model: 

opensns在阿里云Linux虚拟主机运行时后台ajax错误_第4张图片


意外不意外,惊喜不惊喜,就是两个换行,就是两个换行,两个换行...


在你的Controller的初始化函数里面,假如你使用了

$this->productModel = D('Product/Product');

这样的代码,然后,在其他方法体里面使用ajaxReturn函数 或者  $this->success("xxx");  或者 $this->error("xxx");的时候,它就连带$this->productModel里面的换行也一起给你


阿里云虚拟主机的magic_quotes_gpc,把它也禁了吧:

opensns在阿里云Linux虚拟主机运行时后台ajax错误_第5张图片






























你可能感兴趣的:(PHP)