问题所在:
Thinkphp 的控制器方法json() http://www.kancloud.cn/manual/thinkphp5/118017 默认把contentType设为"application/json"
但是IE10版本以下的浏览器IE9,8,7都不支持contentType=application/json,在用jq 的ajaxSubmit或ajaxForm方法提交请求时,会发生错误,提示文件下载。(很奇怪。。。用$.post()提交ajax请求就不会出现这个问题。
相关描述:
http://www.thinkphp.cn/code/196.html
http://www.360doc.com/content/15/0218/19/466494_449338553.shtml
解决思路:
既然不支持contentType=application/json,那么我们就还是用contentType=text/html的方式,
原始的简单粗暴方法:用string类型的json字符串进行通信,然后解析~
例子:
Thinkphp Controler:
return "{\"status\":\"success\",\"msg\":\"提交成功\",\"data\":\"null\"}";
/*return json([
<span style="white-space:pre"> </span>'status' => 'success',
<span style="white-space:pre"> </span>'msg' => '提交成功',
<span style="white-space:pre"> </span>'data' => null
<span style="white-space:pre"> </span>]);*/ </span>
Thinkphp View:
var options = { url: "__ROUTE__", type: 'post', //dataType :'json', success: function (data) { data = JSON.parse(data); if(data.status == 'success'){ show_notice('success',data.msg); } else { show_notice('failed',data.msg); } }, timeout:6000 }; $("#form").ajaxSubmit(options);