解决swfupload.swf在所有浏览器中发出的多余请求导致的302错误

在项目先是使用了uploadify,后来发现在IE下总会引起程序中的错误.

先说下使用uploadify的这个模块,项目用的是Thinkphp框架,URL解释使用的PATHINFO模式,

请求的页面是一个商品编辑页面,/mgr/goods/edit/24.html(看得懂吧?分组/控制器/方法/参数/后缀).

在edit这个方法里,做了常规判断,如果获取的参数id=24在数据库中查不到,则跳转回请求时的页面同时创建一个session,其中框架里获取session的方法做了点修改:

获取 :session('name', true); //true 的话,拿到这个session当即销毁
如果在数据库中拿不到id=24的数据,则创建session并且跳转会请求时的页面REFERER,模版中识别到有错误提 示的session,则显示


解决swfupload.swf在所有浏览器中发出的多余请求导致的302错误_第1张图片

可就这一举措,不知道为什么在IE下一访问存在的商品编辑页面下就会提示这个错,百思不得其解..

后来F12捕获了网络请求,才知道是uploadif.swf发起了一个请求,如图:解决swfupload.swf在所有浏览器中发出的多余请求导致的302错误_第2张图片

可以看见,正常情况请求的是带有参数的url,可这货莫名其妙的就去请求这个链接,导致控制器中没有获取到参数而设置session的错误提示..

发现问题后,换了swfupload这个插件,同样也是,原来他们同样都是使用了swfupload.swf这东西,

分别细读了两个插件的文档,也看了插件中的代码,发现没有可以解决这一办法的途径.

因为这一不良请求是Flash程序发起的,那就从swfupload.swf下手,当时我还不知道有源码这东西,

就下了些工具对swfupload.swf进行拆卸,在导出的SWFUpload.as发现了问题所在,在该文件的1080行中:

/* *************************************************************
 Button Handling Functions
 *************************************************************** */
 private function SetButtonImageURL(button_image_url:String):void {
     this.buttonImageURL = button_image_url;

     try {
             if (this.buttonImageURL !== null && this.buttonImageURL !== "") {
             //就是下面这一段发起的请求
             //this.buttonLoader.load(new URLRequest(this.buttonImageURL));
             }
         } catch (ex:Object) {
         }
 }


由于使用的是uploadify,我不需要对这个按钮设置什么背景图,我就直接把这段注释掉了,后来想重新生成.swf才觉得麻烦,找不到途径,对as proj又不懂,最后找到swfupload.swf的google项目,下了源码,修改,builid,ok搞定..

原帖:http://cuelog.com/archives/177.html

你可能感兴趣的:(uploadify,swfupload)