分享

IE下使用ajaxreturn返回JSON数据提示下载的问题

 蜗牛之窝 2015-02-18
thinkphp新版设置了ajaxreturn方法如果是JSON格式会自动设置头信息为JSON格式,这样做在谷歌下可以正常解析,但是在IE和OPERA浏览器下就会提示下载,从而导致程序出错,修改方法如下
thinkphp新版设置了ajaxreturn方法如果是JSON格式会自动设置头信息为JSON格式,这样做在谷歌下可以正常解析,但是在IE和OPERA浏览器下就会提示下载,从而导致程序出错,修改方法如下
打开:ThinkPHP/Lib/Core/Action.class.php
查找到代码:
  1. header('Content-Type:application/json; charset=utf-8');
复制代码
修改为:
  1. header('Content-Type:text/html; charset=utf-8');
复制代码
总共有两处。
另外,建议官方不要多此一举,text/html所有浏览器都支持,而application/json只有新型浏览器支持,会造成很多不必要的麻烦,[兼容很重要]。

附件 QQ截图20130528152452.png ( 21.83 KB 下载:141 次 )

评论(21) 相关
回复21hujinlong10月26日
顶你!
回复李勇09月02日
直接换成json_encode就ok了
回复qiaoyinqian07月24日
谢谢大师指点迷津。这个问题坑死我了,害的我弄了一上午。
回复大漠05月23日
应该单独判断一下jquery.form.js提交的场景
加入以下判断
if(strpos($_SERVER['CONTENT_TYPE'],'form-data')!=false){
$type = 'EVAL_FOR_JSON';
}
最后添加一种输出
case 'EVAL_FOR_JSON' :
// 返回可执行的js脚本
header('Content-Type:text/html; charset=utf-8');
exit(json_encode($data));
这样就区分开了普通ajax调用和伪form提交
回复雨幻04月09日
我也遇到这个问题,MAKE一下
回复mochong04月08日
建议不要更改header,我是新增了一个text的type类型。
回复mochong04月08日
我也遇到这个问题。ff和chrome没问题,IE11下有问题,会提示返回的json是保存还是下载。通过submit提交。
回复zzw1228662013年09月08日
楼主大神,,,用过swfupload没有啊,,给讲讲呗,,,拜谢了!!
回复balx2013年08月12日
你是通过ajax+iframe吧
回复凌云_phpjishu.com2013年08月16日
不是
回复kxy0002013年08月05日
技术不熟练,用了一个ajxaupload,也改了这个头部声明,不然太麻烦。。。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多