PDA

Просмотр полной версии : Обмен данными с PHP


flash33
07.01.2007, 19:02
Подскажите где почитать как с помощью AS3 отослать и получить переменные с PHP скрипта. В livdocs как то смутно :( о том, что касается метода URLVariables.decode.
К примеру
import flash.utils.*;
import flash.net.*;
import flash.events.*;
function Send(){
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
var request:URLRequest = new URLRequest("http://localhost/request.php");
var variables:URLVariables = new URLVariables();
variables.val = "Hello";
request.data = variables;
request.method = URLRequestMethod.POST;
loader.load(request);
}
function completeHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
var vars:URLVariables = new URLVariables(loader.data);
trace("Ответ " + vars.answer);
}
Send();
PHP скрипт request.php упрощен
<?
$ans = "answer=by";
echo $ans;
?>
При этом раскладе компилятор выдает ошибку 2101. Хотелось бы простой пример получения переменных в плеер

Nirth
07.01.2007, 19:23
а что такое ошибка 2101? (в смысле Description какой?)

Nirth
07.01.2007, 19:28
да кстати а зачем ты проверяешь data, надо ведь result?

flash33
07.01.2007, 21:32
2101 - The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs.
И result чего, извините?

Nirth
07.01.2007, 22:11
Моя ошибка, я перепутал с mx.rpc.http.HTTPService.

Вот посмотри мой пример работы с пхп скриптом

package eu.orangeflash.oblogs.data.rss
{
import flash.events.EventDispatcher;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.URLRequest;

import eu.orangeflash.oblogs.events.FeedLoaderEvent;
import eu.orangeflash.oblogs.data.FeedLoader;
import eu.orangeflash.oblogs.data.IProvider;
import flash.net.URLVariables;

/**
* @Author Nirth
* @see IProvider, FeedLoader.
*
* This class should be created by IProvider implementor, do not use this class directly.
*/
public class RSSProvider extends EventDispatcher implements IProvider
{
private var loader:URLLoader = new URLLoader();
private var request:URLRequest = new URLRequest("http://lab.orangeflash.eu/flex2/oblogs/proxy.php");
private var urlVars:URLVariables = new URLVariables();
/**
* Constructor, creates new RSSProvider instance. this class is not intended to be used directly.
* Use <code>IProvider</code> interface instead.
*
*/
public function RSSProvider()
{
request.data = urlVars;
loader.addEventListener(Event.COMPLETE,resultRecieved);
}
/**
* Method, implementation of <code>IProvider.getPosts(params:Array);</code>, see IProvider for details.
*
* @param params Array of parameters. In this particular case we use only first param,
* that is actual RSS feed url.
* @return Noting.
*/
public function getPosts(params:Array):void
{
urlVars.rss = params[0];
loader.load(request);
}
/**
* @private
* Event handler for Event.COMPLETE event.
*/
private function resultRecieved(evt:Event):void {
dispatchEvent(new FeedLoaderEvent(FeedLoaderEvent.RESULT,evt.target.data,FeedLoader.RSS));
}

}
}

Мне нужны были тектовые данные - поэтому я напрямую использовал loader.data, может попробывать декодировать данные вручную, нежели использовать встроеный парсер в URLVariables.

P.S. а зачем ты декоддируешь ответ? он же уже в примлимом виде должен быть, по крайней мере насколько я знаю PHP посылает его нормально.

flash33
07.01.2007, 22:15
Вроде разобрался.
function completeHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
//var vars:URLVariables = new URLVariables(loader.data); НЕ НАДО!
trace("Ответ " + loader.data);
}
Так все работает )

etc
07.01.2007, 22:16
trace умер? С помощью сего нехитрого средства надо проверять, пришли ли данные, есть ли они, верные ли они. Неужели нельзя проверить, а?
Нет, надо кучу кода написать, а потом искать ошибку…

И, кстати, где у тебя в коде метод decode, который был вызван?

Nirth
07.01.2007, 22:20
etc что с тобой=)?
Flash33 вызывал trace=)

А метод decode вообщето вызывается из конструктора URLVariables ;)

etc
07.01.2007, 22:36
Про trace я говорил в том смысле, что надо проверять не в конце трейсом, а всё подряд, начиная от event.target, loader.data и т.п.
Сама ошибка указывает на то, что в loader.data что-то не так. Почему нельзя это протрейсить, а сразу бежать на форум и спрашивать, я вот этого не понимаю…

Про decode я уж понял, что в конструкторе, это ладно. Хотя тоже не очевидно, спецом его никто не вызывал, а ошибка про него :)

Nirth
07.01.2007, 22:39
гы гы, а я недавно на форуме по NET 3 спросил как загружать картинку=)

etc
07.01.2007, 22:42
Могу только посочувствовать :D

Nirth
07.01.2007, 22:46
не, мне чувак из Microsoft ответил=) я потом его еще два дня мучал=)