これは頻繁に尋ねられることは知っていますが、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;
}
[ドメイン] /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";
?>
あなたの答えをありがとう。
ASコードは正しいようです。したがって、問題はPHPにある可能性があります。最初にこのPHPファイル:
_<?php
echo "test=1&done=true";
?>
_
これにより、ムービーで_"true"
_をトレースできるようになります。次に、PHPをデバッグする必要があります。もちろん、print_r($_POST);
は出力を破棄します。このデバッグステートメントを削除するのを忘れたのかもしれません:-)
@Jesseおよび@ AscensionSystems、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が付加されたオブジェクトではありません。データ構造が必要な場合は、PHP内にXMLなどを作成し、それを出力してから、次のようにloader2.dataをXMLとしてキャストする必要があります。
var returnedData:XML = new XML(loader2.data);
ただし、XMLが正しく形成されていないと、フラッシュでキャッチされないエラーが発生し、アプリがクラッシュするため、必ずtry/catchステートメントを使用してください。