Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка при декодировании URLVariables. (http://www.flasher.ru/forum/showthread.php?t=138060)

catcat 29.03.2010 16:35

Ошибка при декодировании URLVariables.
 
Пытаюсь передать переменные в PHP, делаю пример по книге, но постоянно выскакивает ошибка
Цитата:

2101: Строка, переданная в URLVariables.decode(), должна быть строкой запроса закодированного URL-адреса и содержать пары имя/значение
Сам код простой:
Код:

var serverFile:String = "http://localhost/web/test_flash.php";

var variables:URLVariables = new URLVariables();
variables.id = 1111;
variables.user = "nick";
var urlRequest:URLRequest = new URLRequest(serverFile);
urlRequest.data = variables;
urlRequest.method = URLRequestMethod.POST;

var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;

urlLoader.addEventListener(Event.COMPLETE, userResponseHandler);

try
{ urlLoader.load(urlRequest); }
catch (e:Error) { }

function userResponseHandler(e:Event):void
{
        var urlLoader:URLLoader = URLLoader(e.target);
        var args:URLVariables = new URLVariables(urlLoader.data);
        trace("Data: " + args.response);
}

Кто-нибудь знает, в чем может быть дело? Похожие темы уже поднимались, но в данном случае ответа я так и не нашел :(
У меня Flash CS4.

dimarik 29.03.2010 17:08

Вот это уже было,
Код AS3:

urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;

Зачем делать это?
Код AS3:

var args:URLVariables = new URLVariables(urlLoader.data);

Вы и так дали понять. что data и есть URLVariables.

catcat 29.03.2010 17:43

Даже если вообще эти строчки убрать, все равно та же ошибка выскакивает, там не в handler'е дело :(

dimarik 29.03.2010 18:07

Код AS3:

urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
 
function userResponseHandler(e:Event):void {
        var urlLoader:URLLoader = URLLoader(e.target);
        trace("Data: " + urlLoader.data);
}

Что выводит trace?

wvxvw 29.03.2010 18:32

http://bugs.adobe.com/jira/browse/FP-1666
Поставьте тут крестик.
И никогда на этом форуме не называйте темы так, как вы это сделали. Все шанcы за то, что ваша тема будет закрыта до того, как кто-либо вам ответит. Помогайте себе и другим понять о чем речь, и поверьте, никто наизусть ошибки по номерам не знает.

catcat 29.03.2010 18:58

Цитата:

И никогда на этом форуме не называйте темы так, как вы это сделали
Ок, я учту.
Цитата:

Поставьте тут крестик.
Что за крестик?
Ну а как с этим багом бороться? Как в 10-м Flash Player переменные получить-то?

dimarik 29.03.2010 19:09

Вольный перевод workaround

Не используйте URLLoaderDataFormat.VARIABLES. Установите формат в URLLoaderDataFormat.TEXT и распарсите самостоятельно, например:

Код AS3:

var re:                RegExp = /(?P<prop>[^&=]+)=(?P<val>[^&]*)/g;
var result:        Object;
var response:        String = "foo=bar&bar=foo";
var resultOBJ:        Object = {};
 
do {
        result = re.exec(response);
        if (!result)
                break;
        resultOBJ[result.prop] = result.val;
}
while (true);
 
for (var p:String in resultOBJ) {
        trace(p, "=", resultOBJ[p]);
}


catcat 29.03.2010 19:16

Цитата:

распарсите самостоятельно
Не совсем понятно... так это метод load() вызывать не надо? Как это примерно должно выглядеть? Извиняюсь, если вопрос нубовский.

dimarik 29.03.2010 21:21

Код AS3:

function userResponseHandler(e:Event):void {
        var response:String = URLLoader(e.target).data;
 
        var re:                RegExp = /(?P<prop>[^&=]+)=(?P<val>[^&]*)/g;
        var result:        Object;
        var resultOBJ:        Object = {};
 
        do {
                result = re.exec(response);
                if (!result)
                        break;
                resultOBJ[result.prop] = result.val;
        }
        while (true);
 
        response = "";
 
        for (var p:String in resultOBJ) {
                response += p + "=" + resultOBJ[p] + "&";
        }
 
        var args:URLVariables = new URLVariables(response);
 
        trace( "Data: " + args.toString() );
}



Часовой пояс GMT +4, время: 00:39.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.