图片上传时,QQ浏览器会弹出下载弹框的解决方案
2015-06-12 17:57
736 查看
在做这次的欢乐购车季项目中,出现了一个以前没有遇到的问题,就是点击上传按钮,QQ浏览器会弹出下载框,非常讨厌。从网上查了很多资料,虽然大家对QQ浏览器带给前端的麻烦是深恶痛绝,但是没办法,还得想办法解决。
我用的上传插件是ajaxUpload.js,是以前别人写的,与网上流传的ajaxUpload.js 很相似。 其他浏览器都没有问题,包括IE8,但是QQ浏览器却怎么弄都不行。最后找到原因是QQ浏览器对ajax返回的数据解析不了,所以会出现下载弹框,下载下来一看,就是服务器返回的内容:
{"code":"0","msg":"","data":{"url":"http:\/\/img.weidealer.auto.sina.com.cn\/mall\/d93097cb656ffc78ba5fa21a10663ed8.jpg"}}
下面是我的ajax请求数据:
解决办法是在php里判断了一下浏览器,如果是QQ浏览器,那么把Content-Type 的格式改成 text/html;
php具体代码:
这样修改后,程序就运行正确了。下面是html代码,上传用的是input type="file",然后让这个input透明,上面覆盖着一个满足活动要求的按钮。把input的z-index权限提高,这样点击按钮实际上点击的就是这个input
效果如下:
我用的上传插件是ajaxUpload.js,是以前别人写的,与网上流传的ajaxUpload.js 很相似。 其他浏览器都没有问题,包括IE8,但是QQ浏览器却怎么弄都不行。最后找到原因是QQ浏览器对ajax返回的数据解析不了,所以会出现下载弹框,下载下来一看,就是服务器返回的内容:
{"code":"0","msg":"","data":{"url":"http:\/\/img.weidealer.auto.sina.com.cn\/mall\/d93097cb656ffc78ba5fa21a10663ed8.jpg"}}
下面是我的ajax请求数据:
<span style="font-size:14px;">//图片上传 var upload_func = function(e){ var node = $(this).parent().find('[type="file"]'); var id = node.attr("id"); var pattern = /(jpg|jpeg|png|gif)/i; node.siblings('.upChuan').eq(0).attr('fileid','1'); if(!pattern.test(node.val())) { alert("请选择jpg、jpeg、png、gif格式的图片文件"); } else { var lib = this; var order_id = $('input[name=order_id]').val(); $.ajaxFileUpload ({ url:'/qiche/user/upload?order_id=' + order_id +'&fileid='+node.attr("name"), fileElementId:node.attr("id"), dataType: 'json', success: function (data) { //console.log(data) if(data.code=='0'){ //console.log('000000000000') $($(lib).parent().find('.upPic>div>img')[0]).attr('src',data.data.url); $(lib).parent().find(".upPic").show(); $(lib).parent().find('input[type="hidden"]').val($($("#file1").parent().find('.upPic img')[0]).attr('src')); if(lib.className =='upChuan sail-up'){ var html = []; html.push('<div style="position:relative;">'); html.push('<img class="imghead" src="">'); html.push(' <div class="pic_closen2">'); html.push('<img class="closePic2" width="20" height="20" src="http://i3.sinaimg.cn/qc/buycar/images/close.png">'); html.push('</div>'); html.push('</div>'); $('.upPic2').append(html.join("")); $($(lib).parent().find('.upPic2>div>img')[ii]).attr('src', data.data.url); $(lib).parent().find(".upPic2").show(); $(lib).parent().find('.upPic2').siblings('.sel_pic').text('请选择图片'); ii++; } //console.log(data.data.url); }else{ showMsg(data.msg); } }, error: function (data) { console.log(data); showMsg(data.msg); } }); } };</span>
解决办法是在php里判断了一下浏览器,如果是QQ浏览器,那么把Content-Type 的格式改成 text/html;
php具体代码:
<span style="font-size:18px;background-color: rgb(255, 255, 204);">if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE") ===false) {//不是ie内核 header('Content-Type: application/json;charset=UTF-8'); } if(strpos($_SERVER["HTTP_USER_AGENT"],"QQBrowser") > 0){//QQ浏览器上传时会有问题 header('Content-Type: text/html;charset=UTF-8'); }</span>
这样修改后,程序就运行正确了。下面是html代码,上传用的是input type="file",然后让这个input透明,上面覆盖着一个满足活动要求的按钮。把input的z-index权限提高,这样点击按钮实际上点击的就是这个input
<span style="font-size:14px;"><li> <p class="up_chuan" style="*margin-right:50px;">上传购车发票:</p> <div class="add_pic" style="*margin-left:50px;"> <div class="sel_pic"> 选择图片 </div> <input type="file" name="file" class="file_upload" id="file1"> <input type="hidden" name="hidden[]" id="hidden1" value=""> <a class="upChuan" href="javascript:;" fileid="0">上传</a> <!--上传后显示的图片--> <div class="upPic"> <div style="position:relative;"> <img class="imghead" src=""> <div class="pic_closen"> <img class="closePic" width="20" height="20" src="http://www.sinaimg.cn/qc/buycar/images/close.png"> </div> </div> </div> </div> </li></span>
效果如下:
相关文章推荐
- XML 与 JSON 优劣对比
- Patrol 7 架构下?的处理方法
- 解决Ajax悬停效果,无法遮蔽FLASH的问题
- 中病毒后常用的解决方法病毒终极解决方案
- 再谈Jquery Ajax方法传递到action(补充)
- Dom在ajax技术中的作用说明
- newtonsoft.json解析天气数据出错解决方法
- QQ尾巴 InfoMs.Ime 解决方案
- 使用Ajax实时检测"用户名、邮箱等"是否已经存在
- 探讨Ajax中同步与异步之间的区别
- vbs 解析json jsonp的方法
- IE对CSS样式表的限制分析与解决方案
- 原生AJAX写法实例分析
- 探秘ajax跨域请求
- Ajax中浏览器和服务器交互详解
- ajax实现点击不同的链接让返回的内容显示在特定div里
- ajax 动态传递jsp等页面使用id辨识传递对象
- AJAX简单应用实例-弹出层
- 开源MySQL高效数据仓库解决方案:Infobright详细介绍
- jquery JSON的解析方式示例介绍