7

私はURLLoaderを使用して、いくつかのキーと値のペアをphpスクリプトに送信します。このスクリプトは、それらを電子メールに変換し、送信(または送信しない)してから、応答とともに文字列をエコーし​​ます。

最初は問題なく動作します。URLLoaderが投稿し、1分後に電子メールが届きますが、何らかの理由で応答が返されません。実際、私の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イベントが発生しますが、明らかにそれが発生しているので、httpステータスを0に戻すにはどうすればよいですか?何か案は?

4

3 に答える 3

4

見つけた。

問題は URLLoader の dataFormat にありました。これは、送信するものではなく、返されるものの形式です。に切り替えたところURLLoaderDataFormat.TEXT、完全に機能しました。

于 2009-03-02T21:30:21.993 に答える
1

これが発生するもう 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 に答える