URLLoader 404 Error 与 complete事件

2010年3月31日 6 条评论

最开始发现是在AS2里用MovieClipLoader加载图片,那次地址写错了,但是依然有onLoadComplete事件触发。
请看下面的代码:

var mc:MovieClip = _root.createEmptyMovieClip("mc", 1);
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = {};
loader.addListener(listener);

// 加载一个错误的图片地址,但只要有数据返回就会触发complete事件
loader.loadClip("http://www.litefeel.com/errorJpg.jpg", mc);

listener.onLoadComplete = function(target:MovieClip):Void
{
    trace("this is loadComplete!");
}

OK,上面明明是一个错误的图片地址,竟然会触发onLoadComplete事件。
然后用浏览器打开这个错误的地址看了下,是一个404Error页面。又换了好多个地址,不同域名的,可是依然会触发onLoadComplete事件。
所以猜想可能是只要有数据返回就会触发onLoadComplete事件吧(onLoadInit也是一样)。
测试LoadVars后更加断定我的猜想,请看代码:

var loader:LoadVars = new LoadVars();
loader.onLoad = function (success:Boolean):Void
{
    trace("success = " + success);
    trace(loader);
}
// 请更改为非跨域的不存在的地址
loader.load("http://www.litefeel.com/fdsafdsa");

我想这可能是AS2的一个bug吧,不知道AS3里解决了没有。
测试后发现Loader不存在这样的问题了,但是URLLoader,URLStream依然会触发Event.COMPLETE事件。
或许这不是bug,可能Adobe设计的时候就是complete为数据接收完毕,不论是404页面还是原本的地址。
那么我怎么才能知道是我原本想请求的数据还是一个404呢。
可能在HTTPStatusEvent.HTTP_STATUS 这个事件里会给让我区分吧。
测试发现明明由一个不存在地址跳转到404页面,但flashplayer收到的httpStatusCode竟然是200,就是说flashplayer认为这不是错误的请求,是正常的。
请看这个demo:
输入一个随便输入一个网址,如果有跨域请更换地址,再看httpStatusCode和返回的data。
在Event.COMPLETE事件里获取到data数据的。

这是一个urlloader对404错误的测试demo,如果你看不到这个flash,请到文章页面查看!

结果表明:Event.COMPLETE事件在完整数据返回后触发,而不管是404页面还是其他。
存在的问题:没有办法区别是否404页面。
再看官方帮助上对HTTPStatusEvent.HTTP_STATUS的解释。

Dispatched if a call to URLLoader.load() attempts to access data over HTTP. For content running in Flash Player, this event is only dispatched if the current Flash Player environment is able to detect and return the status code for the request. (Some browser environments may not be able to provide this information.) Note that the httpStatus event (if any) is sent before (and in addition to) any complete or error event.

OK,某些浏览器可能不能获取httpStatusCode,但是这个却返回了httpStatusCode:200。

感谢 12345 的回复.原来我之前博客的404页面是直接跳转,但是没有将状态码变成404,返回的依然是正常的状态码200,所以flashplayer认为这是一个正常的页面,而不是404,现在将状态码改成404了,这样flashplayer就返回IOError了,现在一切正常了

本例demo下载☞

标签: , , , ,

AS2的异常Error

2010年3月28日 2 条评论

前几天在调试一个AS2跟后台通信的程序,一直看不到正常的数据显示,然后就挨行trace,终于发现问题所在了.
原来是用了AS2的一个JSON类,如果格式不是json格式就会抛出异常,因为我们的数据格式不会错的,要么就没有数据,否则不会出现格式错误的,所有就没有try catch。
刚好这次测试的时候有一个元素里没有数据,json串为""(空字符串)。然后解析的时候抛了个异常,我没有捕获,就终止那段程序。
请看AS2的JSON里抛异常的方式:
阅读全文...

标签: , , ,

Java 条件编译 Conditional Compilation

2010年3月25日 13 条评论

根据Java编译器的优化的机制,Java也能够提供条件编译。对于条件设为false的语句,编译器将不对条件覆盖的代码段生成字节码。
不仅可以用简单的boolean常量值来做条件编译,还可以用字符串常量及任何其他类型的常量.
例如:
阅读全文...

标签: ,

推荐一款Java反编译器(Java Decompiler),非常好用

2010年3月25日 没有评论

     推荐一款Java反编译器,也使用了挺久的了,感觉还是很好用,就拿出和大家分享一下。 这款Java反编译工具叫 "Java Decompiler", 由 Pavel Kouznetsov开发,目前最新版本为0.3.6. 它由 C++开发,并且官方可以下载 windows、linux和苹果Mac Os三个平台的可执行程序。

 本人之所以认为它还不错,是其有下面几个功能: 阅读全文...

AS2 ComboBox 皮肤设置

2010年3月16日 2 条评论
这是一个AS2的comboBox更换皮肤的效果demo,如果你看不到这个flash,请到文章页面查看!

阅读全文...

标签: , ,
回到顶部