ecshop下can’t parse to JSON出错的一种解决思路

ecshop是一个php下非常常用的开源商城系统,他的ajax的功能非常强大,几乎所有的操作都涉及到了异步操作。
正因为如此,他的模版制作门槛就有点高,你会时不时地发现,这个不显示了,那个不能操作了。除非你用默认模版,不然有你搞得。
根据我的经验,很多情况,如果我们发现功能不能用,该有反应的地方突然没有反应了,我们应该先检查你的模板文件里是不是包含了以下这段代码

var process_request = “正在处理您的请求…”;

这几乎是最常见的AJAX错误,也是发生最多的。
不过这次我做要提到的解决思路要复杂很多。这个错误不常发生,却很难找到解决办法。
当我们点击购买按钮时候,这个商品应该是自动进入购物车,但动作没有响应。如果你在ie下,会出现JS报错。
Exception thrown and not caught (抛出的异常没有被接住)
如果我们用工具调试,会发现类似这样的报错
Fatal error: Bad string at offset 2: {\”spec\”:[],\”goods_id\”:4154,\”number\”:1,\”parent\”:0}
联动文章:http://bbs.ecshop.com/thread-109570-1-1.html (他遇到的问题很我类似)
我先说解决办法:从报错,我们可以看到错误出在了第二反斜杠上。默认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。而ECSHOP没有对POST的数据进行过滤。
简单的解决办法: 在FLOW.php文件的57行,像我这样加上过滤
$_POST['goods'] = stripslashes(json_str_iconv($_POST['goods']));
我中间我一度认为是ecshop的transport和jquery冲突,因为我把ECSHOP做为一个插件插到了PHPCMS2008中。唉,走了很多弯路,做了很多调试才发现这个小Bug的,希望大家不要走我的老路。
联动讨论:http://bbs.ecshop.com/thread-76312-1-1.html