Отправка переменных POST через приложение AIR - PullRequest
1 голос
/ 24 января 2011

Я пытаюсь отправить данные через POST, так как это слишком долго для отправки через GET.

Вот код, который я использую ...

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

Проблема в том, что он всегда отправляет как GET, а данные в vars.html слишком длинные для моего сервера.

Что еще хуже, похоже, что AIR может отправлять GET только через navigateToURL.

Проблема в том, что мне нужно открыть новое окно браузера и отправить данные POST, чтобы скрипт на моем сервере мог создать файл PDF для пользователя.

Какие есть обходные пути для этого?

Ответы [ 2 ]

1 голос
/ 24 января 2011

Я не знаю ни одного способа открыть новое окно браузера с помощью запроса POST, где GET является методом HTTP по умолчанию, используемым для открытия страниц (что действительно имеет смысл).Однако альтернативой может быть размещение данных POST с помощью простого HTTP-запроса в AIR, и как только вы получите ответ на запрос POST в AIR, вы можете открыть новое окно браузера с помощью запроса GET.

:

  1. POST на ваш сервер напрямую из AIR.
  2. Пусть ваш сервер вернет какое-то значение, которое вы можете использовать на шаге 3.
  3. Откройте новый браузерв окне с помощью navigateToURL и прикрепите значение, полученное на шаге 2, к URL.

Я думаю, это должно работать хорошо.

0 голосов
/ 10 апреля 2011
        // 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' ];?>
...