我知道这是经常被问到的,但是我已经在互联网上查找我正在使用我用来发送和接收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;
}
[domain] /test.php中的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";
?>
感谢您的回答。
答案 0 :(得分:7)
您的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
答案 1 :(得分:6)
尝试
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;
}
更新了已完成的功能......
答案 2 :(得分:2)
首先,改变这行代码:
trace(loader2.data.done);
到此:
trace(loader2.data);
您正在从php输出原始文本,因此您在Flash中的数据对象将只是原始文本。它不是附加.done的对象。如果你想拥有一个数据结构,那么你需要在PHP中创建一些XML或其他东西,打印出来然后将loader2.data转换为XML,如下所示:
var returnedData:XML = new XML(loader2.data);
但是,如果您的XML格式不正确,您将在Flash中创建一个未被捕获的错误并使您的应用程序崩溃,因此请确保使用try / catch语句。