通过AIR应用程序发送POST变量

时间:2011-01-23 22:08:39

标签: actionscript-3 flex4 air

我正在尝试通过POST发送数据,因为它太长了,无法通过GET发送。

这是我正在使用的代码......

pdfUrl.method = URLRequestMethod.POST;
var vars:URLVariables = new URLVariables();
vars.html = data;
pdfUrl.data = vars;
navigateToURL(pdfUrl);

问题是它总是作为GET发送,而vars.html中的数据太长,我的服务器无法接收。

更糟糕的是,似乎AIR只能通过navigateToURL发送GET。

问题是,我需要打开一个新的浏览器窗口并发送POST数据,以便我服务器上的脚本可以为用户创建PDF文件。

有什么办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

我不知道有什么方法可以用POST请求打开一个新的浏览器窗口,GET是用来打开页面的默认HTTP方法(这很有意义)。但是,另一种方法是在AIR中使用简单的HTTP请求POST数据,一旦在AIR中获得对POST请求的响应,就可以使用GET请求打开新的浏览器窗口。

所以:

  1. 直接从AIR发送到您的服务器。
  2. 让您的服务器返回某种可在步骤3中使用的值。
  3. 使用navigateToURL打开一个新的浏览器窗口,并将您从步骤2获得的值附加到该URL。
  4. 我觉得这应该很好用。

答案 1 :(得分:0)

        // Upload MP3-Byte-Array
    private function uploadFile():void
    {
        var uploadURL:URLRequest = new URLRequest();
        uploadURL.url = "myfile.php?var1=var1Value&var2=var2Value";
        uploadURL.contentType = 'application/octet-stream';
        uploadURL.method = URLRequestMethod.POST;
        uploadURL.data = heavyDataThatyouWantToPass;
        var urlLoader:URLLoader = new URLLoader();
        urlLoader.addEventListener(Event.COMPLETE, completeHandler);
        urlLoader.load(uploadURL);
    }
    private function completeHandler(event:Event):void
    {
        var loader:URLLoader = URLLoader(event.target);
    }

myfile.php将是这样的:

<?php
$var1 = $_REQUEST['var1Value'] ;
$var2 = $_REQUEST['var2Value'] ;
$heavyData = $GLOBALS[ 'HTTP_RAW_POST_DATA' ];?>