Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.07.2011, 18:58
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 1  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
Attention URLRequest, отправка POST

доброе время суток. первое в акшнскрипте разбераюсь плохо!
есть вот такая вот функция:

Код AS3:
private function saveHandler(e:MouseEvent):void {
			var canvasBmp:BitmapData = canvas.drawing();
			var pngEncoder:PNGEncoder = new PNGEncoder();
			var pngStream:ByteArray = PNGEncoder.encode(canvasBmp);
			canvasBmp.dispose();
			var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
			var pngURLRequest:URLRequest = new URLRequest("http://prznd_d.server/");
			pngURLRequest.requestHeaders.push(header);
			pngURLRequest.method = URLRequestMethod.POST;
			pngURLRequest.data = pngStream;
			navigateToURL(pngURLRequest);
		}
вызывается по нажатию кнопки. при этом после успешного выполнения открывается новое окно браузера, в котором выводится результат с сервера.

Подскажите как сделать так, что б новое окно не открывалось и при этом с текущей страницы не редиректило на новую, а просто сервер возвращал какое-то значение, которое дальше будет обрабатываться во флешке.

примерно работало по такому принципу:

Код AS3:
var vars:LoadVars = new LoadVars();
vars.onData = function(src:String):Void{
}
vars.sendAndLoad(server, vars, "POST");
Заранее спасибо за ответы.


Последний раз редактировалось syegorius; 23.07.2011 в 19:04.
Старый 23.07.2011, 19:48
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 2  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
URLLoader

Старый 24.07.2011, 01:02
2Sun вне форума Посмотреть профиль Отправить личное сообщение для 2Sun Найти все сообщения от 2Sun
  № 3  
Ответить с цитированием
2Sun
[+1 24.05.11]
[+1 09.08.11]
 
Аватар для 2Sun

Регистрация: Mar 2011
Сообщений: 101
Вызов пхп скрипта и передача параметров в него:

Код AS3:
public function go():void
		{
			var request:URLRequest = new URLRequest("http://путь на ВАШ файл.php");
			request.method = URLRequestMethod.POST;
 
			var variables:URLVariables = new URLVariables();
 
			variables.one = 5;
                        variables.two = 10;
 
                        request.data = variables;
 
			var loader:URLLoader = new URLLoader(request);
			loader.addEventListener(Event.COMPLETE, phpComplete);
			// ------ Это формат данных которые возвращаются с сервера, для разных типов надо будет менять. В нашем случае будут просто переменные
                        loader.dataFormat = URLLoaderDataFormat.VARIABLES;
                        // ----------------
			loader.load(request);
		}
Теперь получаем данные из ПХП
Код AS3:
public function phpComplete (event:Event):void
{
			var variables:URLVariables = new URLVariables( event.target.data );
			trace (variables.res);
//Вернет 15
}
В пхп все выглядит примерно так:

Код:
<?
$one=$_POST['one'];
$two=$_POST['two'];
// или делайте с ними что хотите здесь.
$res= $one+$two;
echo '&res='.$res;
?>


Последний раз редактировалось 2Sun; 27.07.2011 в 10:59.
Старый 24.07.2011, 16:47
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 4  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
пасиба! получилось) правда по началу появлялась ошибка:

Error: Error #2101: Строка, переданная в URLVariables.decode(), должна быть строкой запроса закодированного URL-адреса и содержать пары имя/значение.
at Error$/throwError()
at flash.net::URLVariables/decode()
at flash.net::URLVariables()
at flash.net::URLLoader/onComplete()

я вспомнил что где-то видел что с сервера взвращали перемынные так: res=done, и потом у меня все заработало!

Добавлено через 3 часа 51 минуту
сейчас возник еще один вопрос:

Код AS3:
var pngStream:ByteArray = PNGEncoder.encode(canvasBmp);
                        var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
			var pngURLRequest:URLRequest = new URLRequest("http://prznd_d.server/");
			pngURLRequest.requestHeaders.push(header);
			pngURLRequest.method = URLRequestMethod.POST;
			pngURLRequest.data = pngStream;
			var loader:URLLoader = new URLLoader(pngURLRequest);
			loader.addEventListener(Event.COMPLETE, phpComplete);
	                loader.load(pngURLRequest);
когда функция выглядет вот так все нрмально работает...
но мне помимо этого нужно отправить на сервер несколько переменных, например user_id и message_id.
когда я пределываю функцию вот так:

Код AS3:
var pngStream:ByteArray = PNGEncoder.encode(canvasBmp);
                       var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
			var pngURLRequest:URLRequest = new URLRequest("http://prznd_d.server/");
			pngURLRequest.requestHeaders.push(header);
			pngURLRequest.method = URLRequestMethod.POST;
			      var variables:URLVariables = new URLVariables();
			      variables.image = pngStream;
                              variables.user_id = 1;
			      variables.message_id = 1;
			pngURLRequest.data = variables;//pngStream;
			var loader:URLLoader = new URLLoader(pngURLRequest);
			loader.addEventListener(Event.COMPLETE, phpComplete);
			loader.load(pngURLRequest);
то на сервере $_POST['image'] содержит только "png ", подскажите в чем дело?

Старый 24.07.2011, 20:43
2Sun вне форума Посмотреть профиль Отправить личное сообщение для 2Sun Найти все сообщения от 2Sun
  № 5  
Ответить с цитированием
2Sun
[+1 24.05.11]
[+1 09.08.11]
 
Аватар для 2Sun

Регистрация: Mar 2011
Сообщений: 101
syegorius, да, нужно вывод с пхп делать пара-значение, в голове моей опилки.
Код:
echo '&res='.$res;

Старый 25.07.2011, 01:18
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 6  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
сейчас возник еще один вопрос:

Код AS3:
var pngStream:ByteArray = PNGEncoder.encode(canvasBmp);
                        var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
			var pngURLRequest:URLRequest = new URLRequest("http://prznd_d.server/");
			pngURLRequest.requestHeaders.push(header);
			pngURLRequest.method = URLRequestMethod.POST;
			pngURLRequest.data = pngStream;
			var loader:URLLoader = new URLLoader(pngURLRequest);
			loader.addEventListener(Event.COMPLETE, phpComplete);
	                loader.load(pngURLRequest);
когда функция выглядет вот так все нрмально работает...
но мне помимо этого нужно отправить на сервер несколько переменных, например user_id и message_id.
когда я пределываю функцию вот так:

Код AS3:
var pngStream:ByteArray = PNGEncoder.encode(canvasBmp);
                       var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
			var pngURLRequest:URLRequest = new URLRequest("http://prznd_d.server/");
			pngURLRequest.requestHeaders.push(header);
			pngURLRequest.method = URLRequestMethod.POST;
			      var variables:URLVariables = new URLVariables();
			      variables.image = pngStream;
                              variables.user_id = 1;
			      variables.message_id = 1;
			pngURLRequest.data = variables;//pngStream;
			var loader:URLLoader = new URLLoader(pngURLRequest);
			loader.addEventListener(Event.COMPLETE, phpComplete);
			loader.load(pngURLRequest);
то на сервере $_POST['image'] содержит только "png ", подскажите в чем дело?

Старый 25.07.2011, 02:03
2Sun вне форума Посмотреть профиль Отправить личное сообщение для 2Sun Найти все сообщения от 2Sun
  № 7  
Ответить с цитированием
2Sun
[+1 24.05.11]
[+1 09.08.11]
 
Аватар для 2Sun

Регистрация: Mar 2011
Сообщений: 101
Все просто - ByteArray так не передается.

Закодируйте его в JSON а потом передавайте.

Старый 25.07.2011, 02:33
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 8  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
вообще я только что нашел решение проблемы оно ниже если кому пригодится и реально настолько просто, что я даже упустил это из головы),
но тем не менее хотелось бы узнать вот что - при кодировании байт-массива в JSON насколько вырастет его размер? если например то, что у меня сейчас есть, создает картинку в среднем размером около 100кб, т.е. как я понимаю на сервер отправляется около 100кб какой-то информации..

а это тот способ, которым можно отправить остальные переменные:

The thing is, there is no actual documentation when you want to send both a byteArray and variables. As you can see in the examples, when you send variables, you set the data property of the URLRequest equal the your URLVariables, but when you send a byteArray you also set the data property equal to your byteArray. So you cannot send both type of data at the same time this way. The way I found is actually pretty simple and I don’t why others have not blogged about this (trust me I have looked for this). What you do is you set the data of the URLRequest equal to the byteArray, but you put your variables in the url String of the URLRequest. Here is some code showing it:

Код AS3:
package {
  import flash.display.Sprite;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.net.URLRequestMethod;
  import flash.display.BitmapData;
  import flash.utils.ByteArray;
  import com.adobe.images.JPGEncoder;
 
  public class   ByteArrayAndVariableSendExample extends Sprite {
    public function  ByteArrayAndVariableSendExample() {
      var url:String = "http://www.[yourDomain].com/receiveFile.php?exampleSessionId=" + new Date().getTime() + "&amp;exampleUserLabel=guest" ;
 
      var someBitmapData:BitmapData = new BitmapData();//let say we have some bitmapdata
 
      //using the jpeg encoder from the core library
      var jpgEncoder:JPGEncoder = new JPGEncoder(80);
      var myByteArray:ByteArray = jpgEncoder.encode(someBitmapData);
 
      var request:URLRequest = new URLRequest(url);
      request.method = URLRequestMethod.POST;
 
      request.data = myByteArray;
      var loader:URLLoader = new URLLoader();
 
      loader.load(request)
    }
  }
}

Старый 25.07.2011, 12:47
2Sun вне форума Посмотреть профиль Отправить личное сообщение для 2Sun Найти все сообщения от 2Sun
  № 9  
Ответить с цитированием
2Sun
[+1 24.05.11]
[+1 09.08.11]
 
Аватар для 2Sun

Регистрация: Mar 2011
Сообщений: 101
Этот пример от Вашего ничем не отличается, кроме кодирования в jpg вместо png - но Вы ведь писали, что Вам нужно еще какие то параметры передать. А здесь этого нет.

Старый 26.07.2011, 02:07
syegorius вне форума Посмотреть профиль Отправить личное сообщение для syegorius Найти все сообщения от syegorius
  № 10  
Ответить с цитированием
syegorius

Регистрация: Nov 2010
Сообщений: 91
ну да, только теперь я эти параметры отправляю через get, в самом адресе, а саму картинку как и было через пост и на сервере беру ее из $GLOBALS['http_raw_post_data'];

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:18.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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