【问题标题】:Sending POST variables via an AIR application通过 AIR 应用程序发送 POST 变量
【发布时间】:2011-01-23 22:08:39
【问题描述】:

我正在尝试通过 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 文件。

有什么解决方法?

【问题讨论】:

    标签: actionscript-3 flex4 air


    【解决方案1】:

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

    所以:

    1. 直接从 AIR POST 到您的服务器。
    2. 让您的服务器返回某种可以在第 3 步中使用的值。
    3. 使用 navigateToURL 打开一个新的浏览器窗口,并将您从第 2 步获得的值附加到 URL。

    我认为这应该很好用。

    【讨论】:

      【解决方案2】:
              // 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' ];?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-01
        • 1970-01-01
        • 2014-01-30
        • 2012-01-02
        • 2011-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多