Как поймать HTTP 404 во Flash - PullRequest
2 голосов
/ 16 апреля 2010

Когда я выполняю (2-й) приведенный ниже код с неправильным URL (число '1', добавленное в конце URL), я получаю следующую ошибку. Как я могу перехватить эту ошибку, если URL неверен, чтобы я мог выдать сообщение об ошибке пользователю?

Ошибка при открытии URL 'http://localhost/myapp/cgi-bin/savePlanScale.ashx1?NoCache%5FRaumplaner=F7CF6A1E%2D7700%2D8E33%2D4B18%2D004114DEB39F&ScaleString=5%2E3&ModifyFile=data%2Fdata%5Fzimmere03e1e83%2D94aa%2D488b%2D9323%2Dd4c2e8195571%2Exml' httpStatusHandler: [HTTPStatusEvent type = "httpStatus" пузырьки = ложная отмена = ложная eventPhase = 2 статус = 404] статус: 404 Ошибка: Ошибка № 2101: Der a URLVariables.decode () übergebene String muss ein URL-кодер. при ошибке $ / throwError () на flash.net::URLVariables/decode () на flash.net::URLVariables () на flash.net::URLLoader/onComplete ()


    public static function NotifyASPXofNewScale(nScale:Number)
{
   var strURL:String ="http://localhost/myapp/cgi-bin/savePlanScale.ashx1"
   // CAUTION: when called from website, RELATIVE url...
    var scriptRequest:URLRequest = new URLRequest(strURL);
   var scriptLoader:URLLoader = new URLLoader();
   // loader.dataFormat = URLLoaderDataFormat.TEXT; // default, returns as string
   scriptLoader.dataFormat = URLLoaderDataFormat.VARIABLES; // returns URL variables
   // loader.dataFormat = URLLoaderDataFormat.BINARY; // to load in images, xml files, and swf instead of the normal methods
   var scriptVars:URLVariables = new URLVariables();

   scriptLoader.addEventListener(Event.COMPLETE, onLoadSuccessful);
   scriptLoader.addEventListener(IOErrorEvent.IO_ERROR, onLoadError);
   scriptLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
   scriptLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);

   scriptVars.NoCache_Raumplaner = cGUID.create();
   scriptVars.ScaleString = nScale;
   scriptVars.ModifyFile = "data/data_zimmere03e1e83-94aa-488b-9323-d4c2e8195571.xml";

   scriptRequest.method = URLRequestMethod.GET;
   scriptRequest.data = scriptVars;

   scriptLoader.load(scriptRequest);


   function httpStatusHandler(event:HTTPStatusEvent):void 
   {
        trace("httpStatusHandler: " + event);
        trace("status: " + event.status);
    }

   function onLoadSuccessful(evt:Event):void
   {
        trace("cSaveData.NotifyASPXofNewScale.onLoadSuccessful");
        trace("Response: " + evt.target.data);


        ExternalInterface.call("alert", "Die neue Skalierung wurde erfolgreich gespeichert.");
        //getURL("javascript:alert(\""+"Die neue Skalierung wurde erfolgreich gespeichert.\\nALLE Instanzen des Browsers schliessen und neu starten, damit die Änderung in Kraft tritt."+"\");");

        if (evt.target.data.responseStatus == "YOUR FAULT")
        {
            trace("Error: Flash transmitted an illegal scale value.");
            ExternalInterface.call("alert", "Fehler: Flash konnte die neue Skalierung nicht abspeichern.");
        }

        if (evt.target.data.responseStatus == "EXCEPTION")
        {
            trace("Exception in ASP.NET: " + evt.target.data.strError);
            ExternalInterface.call("alert", "Exception in ASP.NET: " + evt.target.data.strError);
        }
       }


       function onLoadError(evt:IOErrorEvent):void
       {
       trace("cSaveData.NotifyASPXofNewScale.onLoadError");
       trace("Error: ASPX or Transmission error. ASPX responseStatus: " + evt);
       ExternalInterface.call("alert", "ASPX - oder Übertragungsfehler.\\nASPX responseStatus: " + evt);
       //getURL("javascript:alert(\"" + "ASPX - oder Übertragungsfehler.\\nASPX responseStatus: " + receiveVars.responseStatus + "\");");
   }


   function onSecurityError(evt:SecurityErrorEvent):void
   {
        trace("cSaveData.NotifyASPXofNewScale.onSecurityError");
        trace("Security error: " + evt);
        ExternalInterface.call("alert", "Sicherheitsfehler. Beschreibung: " + evt);
   }

   }

1 Ответ

1 голос
/ 21 апреля 2010

С http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/URLLoader.html#event:httpStatus

httpStatus: Отправляется, если вызов URLLoader.load () пытается доступ к данным через HTTP. Для содержимого, запущенного во Flash Player, это событие отправляется только в том случае, если текущая среда Flash Player может определить и вернуть код состояния для запроса. (Какой-то браузер Среды могут быть не в состоянии предоставить эту информацию.) Обратите внимание, что событие httpStatus (если есть) отправляется до (и в дополнение к) любого событие завершения или ошибки.

Вы используете отладчик Flash Player? Вы пробовали читать сообщения трассировки, полученные при открытии приложения из браузера, а не только из проигрывателя? Из вышеприведенного текста кажется, что он будет срабатывать только при определенных обстоятельствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...