Я знаю, что это часто спрашивают, но я просмотрел по всему Интернету, чтобы найти ошибку, которую я делаю, с кодом, который я использовал для отправки и получения данных от AS3 до PHP и наоборот. Вы можете найти ошибку? Вот мой код:
AS3:
import flash.events.MouseEvent; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLVariables; import flash.net.URLLoaderDataFormat; import flash.net.URLRequestMethod; import flash.events.Event; submitbtn.addEventListener(MouseEvent.CLICK, sendData) function sendData(event:MouseEvent):void { var loader : URLLoader = new URLLoader; var urlreq:URLRequest = new URLRequest("http://[mydomain]/test.php"); var urlvars: URLVariables = new URLVariables; loader.dataFormat = URLLoaderDataFormat.VARIABLES; urlreq.method = URLRequestMethod.POST; urlvars.uname = nametxt.text; urlvars.apellido = aptxt.text; urlvars.email = emtxt.text; urlvars.cedula = cctxt.text; urlvars.score = scoretxt.text; urlreq.data = urlvars; loader.addEventListener(Event.COMPLETE, completed); loader.load(urlreq); } function completed(event:Event): void { var loader2: URLLoader = URLLoader(event.target); trace(loader2.data.done); resptxt.text = event.target.data.done; }
PHP внутри [domain] /test.php:
<?php $username = $_POST["uname"]; $apellido = $_POST["apellido"]; $cedula = $_POST["cedula"]; $email = $_POST["email"]; $score = $_POST["score"]; print_r($_POST); if (!($link=mysql_connect(databasemanager,username,password))) { echo "Error conectando a la base de datos."; exit(); } if (!mysql_select_db(database,$link)) { echo "Error seleccionando la base de datos."; exit(); } try { mysql_query("insert into scores(name,lastName,email,document,score) values('$username','$apellido','$email','$cedula','$score')",$link); print "done=true"; } catch(Exception $e) { print "done=$e->getMessage()"; } echo "done=true"; ?>
Спасибо за ваши ответы.
Ваш код AS кажется правильным. Таким образом, проблема может возникать в PHP. Сначала проверьте этот файл PHP:
<?php echo "test=1&done=true"; ?>
Это должно позволить вашему фильму "true"
. Затем вы должны отлаживать ваш PHP. print_r($_POST);
конечно, разрушает ваш выход. Может быть, вы забыли удалить эту инструкцию для отладки 🙂
@Jesse и @Ascension Systems, проверьте документы для URLVariables: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/URLVariables.html
Пытаться
submitbtn.addEventListener(MouseEvent.CLICK, sendData); function sendData(event:MouseEvent):void var urlreq:URLRequest = new URLRequest ("http://[mydomain]/test.php"); urlreq.method = URLRequestMethod.POST; var urlvars:URLVariables = new URLVariables(); urlvars.uname = nametxt.text; urlvars.apellido = aptxt.text; urlvars.email = emtxt.text; urlvars.cedula = cctxt.text; urlvars.score = scoretxt.text; urlreq.data = urlvars; var loader:URLLoader = new URLLoader (urlreq); loader.addEventListener(Event.COMPLETE, completed); loader.dataFormat = URLLoaderDataFormat.VARIABLES; loader.load(urlreq); } public function completed (event:Event):void{ var variables:URLVariables = new URLVariables( event.target.data ); resptxt.text = variables.done; }
Обновлена завершенная функция …
Прежде всего, измените эту строку кода:
trace(loader2.data.done);
к этому:
trace(loader2.data);
Вы выводите исходный текст из php, поэтому ваш объект данных во флэш-памяти просто будет сырым текстом. Это не объект с .done, прикрепленным к нему. Если вы хотите иметь структуру данных, вам нужно создать какой-то XML или что-то внутри PHP, распечатать это и затем загрузить loader2.data как XML, например:
var returnedData:XML = new XML(loader2.data);
Однако, если ваш XML-код не сформирован правильно, вы создадите неповрежденную ошибку во флэш-памяти и разбиваете свое приложение, поэтому убедитесь, что вы используете инструкции try / catch.