Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   as 2.0 http-запрос (http://www.flasher.ru/forum/showthread.php?t=150532)

mrGreen 13.02.2011 17:04

as 2.0 http-запрос
 
доброго времени суток!
помогите советом, а то чет я сам разобраться не могу. мне нужно отправить запрос из ас 2.0 с параметром. например: http://10.0.3.27:8080/Default.aspx?02-08-02/1581/10, параметр всегда будет разный. и получить обратно ответ(ответ строка, например, Документ не найден и тд). почитав тут я на форуме понял, что мне нужно использовать LoadVars(). вот собственно код:
Код AS1/AS2:

var send_lv:LoadVars = new LoadVars();
var result_lv:LoadVars = new LoadVars();
send_lv.decode("02-08-02/1581/10");
send_lv.sendAndLoad('http://10.0.3.27:8080/Default.aspx', result_lv, 'POST')
result_lv.onLoad = function(success:Boolean)
{
        if (success)
        {
                trace(this);
        }
        else
        {
                trace('Error connecting to server.');
        }
};

и вроде запрос уходит, но ответ я получаю следующий:
%EF%BF%BD%EF%BF%BD%EF%BF%BD%20%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD=&onLoad=%5Btype%20Function%5D
подскажите как быть? :( может все и работает, да только как мне с кодировкой разобраться. по серверной части ничего сказать не могу, писал не я.

kseniya 14.02.2011 01:46

используйте onData
Код AS1/AS2:

result_lv.onData = function(data:String):Void 
{
                trace(data);
};


mrGreen 14.02.2011 02:17

используя onData я получаю следующий ответ: ��� ����
как в ас работать с кодировкой?

dark256 14.02.2011 11:48

Попробуйет во флэше написать

Код AS1/AS2:

System.useCodepage = true


mooncar 14.02.2011 11:54

Гм, не надо System.useCodepage = true, это скверная практика.
Необходимо разобраться с кодировкой.
Скрипт должен выдать ответ в кодировке utf-8, с которой работает флеш.
Не знаю, как это делается в, судя по всему, ASP, в PHP же есть соотв. функции.
В процессе отладки трейсите аргумент onData, так всё верно.

Просто если вы напишите во флешке System.useCodepage = true, то на ОС, где используется другая кодовая таблица , будут проблемы, т.е. флешка не будет универсальной.

Tails 14.02.2011 11:56

Цитата:

Сообщение от mooncar (Сообщение 973123)
Гм, не надо System.useCodepage = true, это скверная практика.

спс, ты походу сообщение дописываеш :)

mrGreen
В пхп есть функция по перегону переменных в utf 8, но там ещё дополнительная библиотека требуеться.
PHP код:

$s utf8_encode($s); 

Лучше просто сохранить документ в utf-8 и ноу проблем.

mooncar 14.02.2011 12:06

Никаких похождений.
PHP код:

$str iconv('Windows-1251''UTF-8'$str); 

Тем более, что если какой-то обрабатываемый скриптом документ или сам скрипт оперирует данными изначально в utf-8, то это и не требуется.
Автору, возможно, будет достаточно пересохранить сам скрипт в UTF-8 в любом простом текстовом редакторе типа Блокнота.

mrGreen 14.02.2011 13:54

я только что попробовал этот запрос в php и действительно, asp выдает ответ в win1251. и при помощи iconv эту проблему можно решить. но проблема в том, что серверная часть на asp.net, а я в ней ну не в зуб ногой. я уже попросил сотрудника переписать серверную часть, чтобы выдавал ответ на utf-8. жду результат. надеюсь после этого во флеше я буду получать разумные ответы

mrGreen 14.02.2011 16:18

и еще вопрос:
до того, как использовать sendAndLoad я проверял на
Код AS1/AS2:

 send_lv.send('http://10.0.3.27:8080/Default.aspx', _blank, 'POST')

, чтобы проверить как он подставляет параметр. и я заметил, что он меняет / на %2F, чего мне абсолютно не надо и в конце параметра ставит = (вот что происходит с параметром 02-08-02%2F1581%2F10=). :( подскажите пожалуйста как мне избежать подобной деформации параметра?

mooncar 17.02.2011 19:47

1) Приведите полный код, т.е. все, что связано с работой LoadVars.
И еще. К чему у вас в примере в начале топика decode ? Что вы пытаетесь сделать?
Синтаксис для отправки данных такой:
Код AS1/AS2:

send_lv.var1 = значение1;
send_lv.var2 = значение2;
send_lv.sendAndLoad('http://10.0.3.27:8080/Default.aspx',  result_lv, 'POST');


2) К чему у вас в примере в начале топика decode ? Какова цель применения этого метода?

mrGreen 18.02.2011 09:45

полный код приведен в первом сообщении. Просто чтобы видеть какой запрос отправляется я решил проверить это при помощи send(). Пока писал сообщение заметил, что от браузера завист подобное искожение. :eek: хм.. и вот что я получаю:
1)
Код AS1/AS2:

var send_lv:LoadVars = new LoadVars();
send_lv.nom = "02-08-02/1581/10";
send_lv.send('http://10.0.3.27:8080/Default.aspx', '_blank', 'POST');

открывается браузер и в адресной строке следующее:
IE8
http://10.0.3.27:8080/Default.aspx?n...02%2F1581%2F10
Chrome
http://10.0.3.27:8080/Default.aspx?nom=02-08-02/1581/10
а мне собственно нужен следующий результат:
http://10.0.3.27:8080/default.aspx?02-08-04/1125/10
2) decode использовал чтобы схитрить:
Код AS1/AS2:

var send_lv:LoadVars = new LoadVars();
send_lv.decode("02-08-02/1581/10");
send_lv.send("http://10.0.3.27:8080/Default.aspx", "_blank", "POST");

результат в IE8
http://10.0.3.27:8080/Default.aspx?0...2%2F1581%2F10=
Chrome
http://10.0.3.27:8080/Default.aspx?02-08-02/1581/10=
т.е. выходит, что если даже поправят кодировку на серверной части, чего к сожалению еще почему-то не сделали, у меня все равно будет не тот запрос что мне нужно. мне не нужно чтобы выводилось наименование параметра и знак = как в первом случае или знак "равно" как во втором. мне нужно чтобы после url выводилось только значение параметра, например вот так:
http://10.0.3.27:8080/Default.aspx?02-08-02/1581/10
подскажите как это можно реализовать :(

mooncar 18.02.2011 10:19

Так и делайте так, ничто не мешает делать параллельно и GET и POST (если вам вообще POST нужен).
Код AS1/AS2:

nom = '02-08-02/1581/10';
send_lv.sendAndLoad('http://10.0.3.27:8080/Default.aspx?' + nom, result_lv, 'POST');


mrGreen 18.02.2011 16:25

блин, если я делаю как Вы говорите, то выходит вот что:
http://10.0.3.27:8080/Default.aspx02-08-02/1581/10?
немножко не то что необходимо. может я чего не так делаю?
вот код:
Код AS1/AS2:

var send_lv:LoadVars = new LoadVars();
nom = "02-08-02/1581/10";
send_lv.send('http://10.0.3.27:8080/Default.aspx' + nom, '_blank', 'GET');


mooncar 18.02.2011 16:27

Знак вопроса потеряли м/у url-ом и переменной
Код AS1/AS2:

'http://10.0.3.27:8080/Default.aspx?' + nom


mrGreen 18.02.2011 16:38

эмм.. не то чтобы потерял, он теперь в конце всего запроса и добавление его(знака вопроса) в конец url
Код AS1/AS2:

var send_lv:LoadVars = new LoadVars();
nom = "02-08-02/1581/10";
send_lv.send('http://10.0.3.27:8080/Default.aspx?' + nom, '_blank', 'GET');

дает следующий результат:
http://10.0.3.27:8080/Default.aspx?02-08-02/1581/10?

mooncar 18.02.2011 16:46

Уфф.. sendAndLoad пробуйте. Без рефреша. Вам же send только в тестовых целях нужен был?
Офтоп. Может анимированную аватрку приструните? Тяжело топик с вашими постами читать, особенно в пятницу. :(

mrGreen 18.02.2011 17:00

Да, все верно. send только для теста, чтобы убедиться, что строка запроса соответствует необходимой. только что проверил с sendAndLoad и получаю результат, что некорректный запрос. и можно по подробней, что значит без рефреша?
черт, я в тупике. неужели это нельзя реализовать на флеше?

mooncar 18.02.2011 17:08

Часто использовал работу с передачей скрипту переменных, сложные запросы из флеша в том числе, и сильных проблем на стороне флеша не было.
Попробуйте проверить как работает сам скрипт, может быть трабла в нем. Вбейте в адресную строку браузера запрос и посмотрите ответ.
Если все ок, нужно смотреть, что отправляет флеш. Можно сниффером, мне обычно достаточно было трейсить саму строку запроса, если что-то передавал через GET в адресной строке.
Как обычно, локализация проблемы = 50% успеха ее решения.

Кстати, попробуйте еще простой метод load + обработчик onLoad.

mrGreen 18.02.2011 17:25

блин, ну это не сложный запрос.. :wacko:
я вбивал в адресную строку браузера данный пример и многие другие. работает отлично. чувствую я здесь точно проблема с тем, что передает флеш.
Цитата:

достаточно было трейсить саму строку запроса
т.е. в моем случае
Код AS1/AS2:

trace(send_lv);

, правильно я пониаю. если да, то получаю пустое значение. дело в том, что я двоечник во флеше :(
Цитата:

простой метод load + обработчик onLoad.
и можно вот тут чуть по подробней

mooncar 18.02.2011 17:31

Ну просто метод LoadVars.load(), синтаксис в хелпе.

mrGreen 18.02.2011 17:44

любой аватар, лишь бы запрос работал =)
метод load уже завтра на свежую голову почитаю, ибо у меня уже 0:43..

dark256 19.02.2011 11:56

Цитата:

Гм, не надо System.useCodepage = true, это скверная практика.
Необходимо разобраться с кодировкой.
Согласен. Не надо. Я обычно пишу, что это дурная практика. НО, если доступа к кодировке базового скрипта НЕТУ, то можно попробовать хотя бы так :) В любом случае, когда чужие скрипты к себе тащишь, левые какие-нибудь, зачастую выхода нету.

mooncar 19.02.2011 11:58

Цитата:

Сообщение от dark256 (Сообщение 974544)
когда чужие скрипты к себе тащишь, левые какие-нибудь, зачастую выхода нету.

Ничто мешает тащить вывод чужого скрипта через свой, в котором простым iconv делаем как надо?
Разве что если свое приложение stand-alone, а чужой скрипт и правда слишком чужой, чтобы его можно было поправить.

dark256 19.02.2011 12:04

Ну.... вот например я вообще ничерта в рнр не шарю :)
И попросить некого довести его до ума. Таким образом - на безрыбье... :)

mooncar 19.02.2011 16:07

Цитата:

Сообщение от dark256 (Сообщение 974550)
Ну.... вот например я вообще ничерта в рнр не шарю :)
И попросить некого довести его до ума. Таким образом - на безрыбье... :)

Я почти тоже. Но разобраться тут - 10 минут от силы. Сперва - как тащить, вторая, как конвертировать. 2 функции php.

mrGreen 20.02.2011 10:00

Цитата:

Кстати, попробуйте еще простой метод load + обработчик onLoad.
ну вот собственно круг замкнулся.. :(
Код AS1/AS2:

var my_lv:LoadVars = new LoadVars();
my_lv.onLoad = function(success:Boolean) {
    if (success) {
    trace(this.toString());
    } else {
    trace("Error loading/parsing LoadVars.");
    }
};
my_lv.load("http://10.0.3.27:8080/Default.aspx");

ответ получаю следдующий:
%CD%E5%E2%E5%F0%ED%FB%E9%20%F4%EE%F0%EC%E0%F2%20%ED%EE%EC%E5%F0%E0=&onLoad=%5Btype%20Function%5D
то же что и в первом сообщении
я в отчаяние, как быть?

mooncar 20.02.2011 10:14

Если вам нужен парсить и формировать ответ, то, поскольку ответ от скрипта должен формироваться так:
Код:

var1=value1&var2=value2&var3=value3....
, при раразборе ответа вам нужно не
Код AS1/AS2:

this.toString()

, а
Код AS1/AS2:

trace(this.var1)
trace(this.var2)

Либо, если ответ нужен полностью как строка, то вместо onLoad обработчик должен быть другой - onData.
Попробуйте воспроизвести пару-тройку примеров на LoadVars из хелпа.

mrGreen 20.02.2011 10:32

я понимаю, все верно. НО это если серверный скрипт на php, то все работает так как Вы и сказали, но серверный скрипт на ASP.NET и ответ не
Код:

var1=value1&var2=value2&var3=value3....
ответ как строка, т.е. если вбить запрос в браузер, то в ответ получаем просто предложение.
Цитата:

Либо, если ответ нужен полностью как строка, то вместо onLoad обработчик должен быть другой - onData.
с onData все отлично работает, но не получается отправить запрос именно такого формата как мне необходимо:
[url]?[значение параметра], например http://10.0.3.27:8080/Default.aspx?02-08-02/1581/10 ,где http://10.0.3.27:8080/Default.aspx - url, 02-08-02/1581/10 - значение параметра. при работе с onData необходим следующий формат [url]?[имя параметра]=[значение параметра]
я уже перебрал массу примеров, в том числе и по вашим советам, но так и не получил нужного результата.. :(

Добавлено через 20 минут
блииин.. простите, это я не прав. все получилось! спасибо Вам огромное! вот как я сделал:
Код AS1/AS2:

var my_lv:LoadVars = new LoadVars();
nom = "02-08-02/1581/10";
my_lv.onData = function(data:String):Void
{
                trace(data);
};
my_lv.load('http://10.0.3.27:8080/Default.aspx?' + nom);


mooncar 20.02.2011 15:58

Пожалуйста. Для "спасибо" кнопочка весов.

PS. Я, кстати, так и не понял, почему нельзя сделать такой же ответ от сервера и на ASP:
Код AS1/AS2:

var1=value1...

Обычная строка ж.

mrGreen 20.02.2011 17:11

на кнопочку уже ткнул =)
нельзя было потому что я в asp ну вообще не в зуб ногой..
серверную часть делал не я. и проблематично сейчас там чего-либо изменить. Сейчас все работает. я несказанно счастлив! )


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

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