2011-12-11 45 views
2

我想在用户单击动画片段时在同一个选项卡上打开网页。我正在使用这种方法:从闪存(AS3)打开发送POST变量的网页

var url:String = "http://www.google.com"; 
var request:URLRequest = new URLRequest(url); 
try { 
    navigateToURL(request); 
} catch (e:Error) { 
    trace("Error occurred!"); 
} 

但我不知道如何打开它发送POST变量。那可能吗?

回答

10

是的,可以通过指定POST作为URLRequest的方法,并使用flash.net.URLVariables作为变量。这是从文档的例子:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/URLRequest.html

package { 
    import flash.display.Sprite; 
    import flash.net.navigateToURL; 
    import flash.net.URLRequest; 
    import flash.net.URLRequestMethod; 
    import flash.net.URLVariables; 

    public class URLRequest_method extends Sprite { 

     public function URLRequest_method() { 
      var url:String = "http://www.[yourDomain].com/application.jsp"; 
      var request:URLRequest = new URLRequest(url); 

      var variables:URLVariables = new URLVariables(); 
      variables.exampleSessionId = new Date().getTime(); 
      variables.exampleUserLabel = "guest"; 
      request.data = variables; 
      request.method = URLRequestMethod.POST; 

      navigateToURL(request); 
     } 
    } 
} 
+1

由于某些原因,变量是使用GET而不是POST发送的,有什么想法? – DomingoSL

+1

即使你做request.method = URLRequestMethod.POST?我从某个地方读取了从Flash IDE执行上述代码的任何地方总是使用GET,但POST在浏览器中运行时将工作。此外,曾经有(也许还是)一个奇怪的错误,使用字符串“POST”将工作,但不是URLRequestMethod.POST常量。所以你可以尝试request.method =“POST”而不是request.method = URLRequestMethod.POST。 –

+0

@DomingoSL你解决了吗? –

1

关于为“子问题”上面:

为增值经销商使用GET而不是POST发送一些原因,任何 想法?

该职位AS3 POST Request sending as a GET可能会帮助,如果你在这个职位和我一样蹒跚。 基本思路是:不要让request.data变为空/空。只需添加“虚拟”或“不显眼”(从服务器的角度来看),如request.data =“\ r \ n”;这应该防止Flash运行时用“GET”覆盖您的“POST”请求。它为我工作(感谢我的服务器端应用程序。足够健壮,可以很好地处理以空参数开头的查询字符串具有空键和空值)。

0

如果在Flash Player中运行且引用的表单没有主体,则即使该方法设置为URLRequestMethod.POST,Flash Player也会自动使用GET操作。出于这个原因,建议始终包含一个“虚拟”主体以确保使用正确的方法。