7

我正在使用 URLLoader 将一些键/值对发送到 php 脚本,然后将它们转换为电子邮件,发送(或不发送),然后回显带有响应的字符串。

起初它工作正常。URLLoader 发布,一分钟后我收到了电子邮件,但由于某种原因,我没有收到回复。事实上,我的 COMPLETE 事件似乎根本没有触发。这让我很困惑,因为如果我收到电子邮件,我知道我必须正确发送所有内容。这是我的代码:

public class Mailman{
    public static const METHOD:String = URLRequestMethod.POST;
    public static const ACTION:String = "mailer.php";

    public static var myLoader:URLLoader = new URLLoader();

    private static function onMessageProgress(e:Event){
        var L:URLLoader = e.target as URLLoader;
        Output.trace("PROGRESS: "+L.bytesLoaded+"/"+L.bytesTotal);
        for(var k in L){
            Output.trace("   "+k+": "+L[k]);
        }
    }

    private static function onOpen(e:Event){
        Output.trace("Connection opened");
    }

    private static function onComplete(e:Event){
        Output.trace("Complete!");
    }

    private static function onStatusChange(e:HTTPStatusEvent){
        Output.trace("Status Changed to "+e.status);
    }

    private static function onMessageFail(e:Event){
        PanelManager.alert("ERROR: Could not send your request. Please try again later.");
    }

    public static function sendMessage(recipient:String,subject:String,message:String){
        var _vars:URLVariables = new URLVariables();
            _vars.recipient = recipient;
            _vars.subject = subject;
            _vars.message = message;

        var req:URLRequest = new URLRequest(ACTION);
        req.data = _vars;
        req.method = METHOD;

        myLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
        myLoader.addEventListener(ProgressEvent.PROGRESS,onMessageProgress);
        myLoader.addEventListener(Event.OPEN,onOpen);
        myLoader.addEventListener(Event.COMPLETE,onComplete);
        myLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS,onStatusChange);
        myLoader.addEventListener(IOErrorEvent.IO_ERROR,onMessageFail);
        myLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onMessageFail);
        myLoader.load(req);
    }

    public static function test(){
        sendMessage("john@example.com","test","this is a test message.");
    }

    function Mailman(){}
}

当我打电话给 时Mailman.test(),我收到的电子邮件与我预期的完全一样,这就是追踪结果:

    连接打开
    进展:45/45
    状态更改为 0

怎么会这样?如果我正确理解了文档,当我开始下载我的响应时会发生 Open 事件,并且显然正在发生这种情况,那么我怎样才能恢复 0 的 http 状态?有任何想法吗?

4

3 回答 3

4

我找到了。

问题出在 URLLoader 的数据格式上。这是您返回的格式,而不是您发送的格式。我把它切换到它URLLoaderDataFormat.TEXT,它工作得很好。

于 2009-03-02T21:30:21.993 回答
1

这可能发生的另一个原因 - 如果您在注册事件侦听器时使用弱引用,并且不保留对 URLLoader 实例和处理事件的实例的引用,GC 可能会在它们接收任何事件之前清理它们。

//make sure the URLLoader and onComplete instances are not local vars
var req:URLRequest = new URLRequest("dosomething.php");
myLoader.addEventListener(Event.COMPLETE, onComplete, false, 0, TRUE);
myLoader.load(req);
于 2010-11-10T23:51:19.427 回答
0

好的,我在我的情况下找到了答案,它是负责 Chrome 中 Status=0 的 .NET 页面。在将响应发送回闪存后,我们在 .net 页面的行中执行该操作,我们正在关闭正在重置页面的响应对象,因此 Chrome 显示 status=0 并且无法呈现结果. 注释掉 response.close 行后,它开始正常工作。我在http://viveklakhanpal.wordpress.com/2010/07/01/error-2032ioerror/上写了我对这个问题的经验以及我是如何解决它的

谢谢,维维克。

于 2010-07-01T11:45:37.250 回答