2013-10-17 3 views
0

Ce devrait être simple. Je suis en train d'envoyer des données POST à ​​un serveur et ai écrit un package personnalisé pour elle comme suit:AS3 Erreur avec POST mais pas avec GET (Erreur de flux # 2032)

package com.cron { 
import flash.events.* 
import flash.net.* 

public class Mail { 
    var scriptURL = "http://www.[mydomain].com/scripts/flashmail.php"; 
    var pass = '[mypassword]' 
    var productName = '[myProduct]' 
    var fromemail = '[email protected][mydomain].com' 
    var scriptLoader,scriptRequest,scriptVars,onComplete 

    public function Mail(ProductName=null, Fromemail=null, OnComplete=null, ScriptURL=null, Pass=null) { 
     //SET PARAMS: 
     scriptURL = (ScriptURL ? ScriptURL : scriptURL) 
     productName = (ProductName ? ProductName : productName) 
     fromemail = (Fromemail ? Fromemail : fromemail) 
     pass = (Pass ? Pass : pass) 
     onComplete = OnComplete ? OnComplete : null 
     //SETUP CLASS: 
     scriptRequest = new URLRequest(scriptURL); 
     scriptLoader = new URLLoader(); 
     scriptVars = new URLVariables(); 
    } 

    public function sendmail(toemail,subject,msg){ 
       
     scriptLoader.addEventListener(Event.COMPLETE, handleLoadSuccessful); 
     scriptLoader.addEventListener(IOErrorEvent.IO_ERROR, handleLoadError); 
     scriptLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, handleLoadError); 
       
     scriptVars.pass = pass; 
     scriptVars.productname = productName; 
     scriptVars.toemail = toemail; 
     scriptVars.subject = subject; 
     scriptVars.msg = msg; 
     scriptVars.fromemail = fromemail; 
     //trace(scriptVars) 

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

     G.traceObj(scriptRequest)  

     scriptLoader.load(scriptRequest); 
     trace("MAIL: Sending mail to "+toemail) 
    } 

    private function handleLoadSuccessful($evt:Event):void{ 
     if(String(scriptLoader.data) != '1'){ 
      trace("MAIL: Error with script:") 
      trace(scriptLoader.data) 
      if(onComplete) onComplete(0); 
      return; 
     }else{ 
      trace('MAIL: Sent successfully') 
      if(onComplete) onComplete(1); 
     } 

    } 
      
    private function handleLoadError($evt):void{ 
        trace("MAIL: Connection Failed with error: "+$evt); 
     if(onComplete) onComplete(0); 
    } 
} 

} 

Si je change URLRequestMethod.POST-URLRequestMethod.GET, tout cela fonctionne très bien. Cependant, l'utilisation POST, je reçois les erreurs suivantes:

MAIL: Connection Failed with error: [HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=0 responseURL=null] 
MAIL: Connection Failed with error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://www.[myDomain].com/scripts/flashmail.php"] 

bizzarely, si je télécharge à mon serveur, il fonctionne très bien! Il refuse simplement de travailler avec un swf local ou une application AIR packagée. J'ai besoin de déployer ceci sur Android il est donc crucial que je le fasse fonctionner localement.

+0

Qu'est-ce que [Mydomain] ici? Est-ce un domaine valide? – Zeus

+0

Oui, c'est juste mon serveur. Ce script exact fonctionne parfaitement lorsque je le commute à GET – cronoklee

+0

ok d'abord vous devez ajouter le dossier à l'emplacement de confiance à partir de [Truested Location Settings] (http://help.adobe.com/en_US/FlashPlayer/LSM/WS6aa5ec234ff3f285139dc56112e3786b68c-7ff0.html) qui contient votre swf ... et en second lieu votre flashMail.php devrait gérer les données POST aussi, mais il semble que c'est ... mais j'espère qu'il est en train de gérer de manière efficace –

Répondre

0
btn.addEventListener(MouseEvent.CLICK,handler); 
function handler(event:MouseEvent):void 
{ 
     var url:URLLoader = new URLLoader(); 
     url.dataFormat = URLLoaderDataFormat.VARIABLES; 
     var request:URLRequest = new URLRequest("http://www.[myDomain].com/scripts/flashmail.php"); 
     var rv:URLVariables = new URLVariables(); 
     rv.user_ = user_.text; 
     request.data = rv; 
     request.method = URLRequestMethod.POST; 
     url.load(request); 
     url.addEventListener(Event.COMPLETE,eventComplete); 
     url.addEventListener(IOErrorEvent.IO_ERROR,ioerror); 
     function eventComplete(e:Event):void 
     { 
      if (e.target.data.success == "ok") 
      { 
       trace('result:' + e.target.data.success2); 
      } 
      else 
      { 
       trace('no result'); 
      } 
     } 
} 
function ioerror(e:Event):void 
{ 
    trace("Connection Error"); 
} 
Questions connexes