![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2010
Сообщений: 91
|
доброе время суток. первое в акшнскрипте разбераюсь плохо!
есть вот такая вот функция: 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); } Подскажите как сделать так, что б новое окно не открывалось и при этом с текущей страницы не редиректило на новую, а просто сервер возвращал какое-то значение, которое дальше будет обрабатываться во флешке. примерно работало по такому принципу: Заранее спасибо за ответы. Последний раз редактировалось syegorius; 23.07.2011 в 19:04. |
|
|||||
|
[+1 24.05.11]
[+1 09.08.11] Регистрация: Mar 2011
Сообщений: 101
|
Вызов пхп скрипта и передача параметров в него:
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); } public function phpComplete (event:Event):void { var variables:URLVariables = new URLVariables( event.target.data ); trace (variables.res); //Вернет 15 } Последний раз редактировалось 2Sun; 27.07.2011 в 10:59. |
|
|||||
|
Регистрация: 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 минуту сейчас возник еще один вопрос: 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. когда я пределываю функцию вот так: 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); |
|
|||||
|
[+1 24.05.11]
[+1 09.08.11] Регистрация: Mar 2011
Сообщений: 101
|
syegorius, да, нужно вывод с пхп делать пара-значение, в голове моей опилки.
|
|
|||||
|
Регистрация: Nov 2010
Сообщений: 91
|
сейчас возник еще один вопрос:
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. когда я пределываю функцию вот так: 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); |
|
|||||
|
[+1 24.05.11]
[+1 09.08.11] Регистрация: Mar 2011
Сообщений: 101
|
Все просто - ByteArray так не передается.
Закодируйте его в JSON а потом передавайте. |
|
|||||
|
Регистрация: 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: 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() + "&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) } } } |
|
|||||
|
[+1 24.05.11]
[+1 09.08.11] Регистрация: Mar 2011
Сообщений: 101
|
Этот пример от Вашего ничем не отличается, кроме кодирования в jpg вместо png - но Вы ведь писали, что Вам нужно еще какие то параметры передать. А здесь этого нет.
|
|
|||||
|
Регистрация: Nov 2010
Сообщений: 91
|
ну да, только теперь я эти параметры отправляю через get, в самом адресе, а саму картинку как и было через пост и на сервере беру ее из $GLOBALS['http_raw_post_data'];
|
![]() |
![]() |
Часовой пояс GMT +4, время: 02:12. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|