【问题标题】:Sending and receiving data from Flash AS3 to PHP从 Flash AS3 向 PHP 发送和接收数据
【发布时间】:2011-10-16 03:16:47
【问题描述】:

我知道这是经常被问到的问题,但我在整个互联网上查找了我在使用用于从 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";    
?>

感谢您的回答。

【问题讨论】:

  • 请至少提供信息到底出了什么问题。
  • 尝试直接在浏览器中运行您的 PHP,将 POST 变量切换为 GET,以便您可以轻松地对其进行测试。我怀疑你会在那里发现一个错误。
  • 这个resptxt.text = event.target.data.done的结果是什么;

标签: php actionscript-3


【解决方案1】:

您的 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 用于发现loader.dataFormat = URLLoaderDataFormat.VARIABLES;
  • 你对print_r($_POST);的看法是对的,那是错误的!!!谢谢大家的回答,我会记住的。
【解决方案2】:

试试

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;
}

更新了已完成的功能...并更正了缺少的括号。

【讨论】:

  • +1 这正是我认为的问题所在(或至少其中一个问题),事实上他正在访问 .done 就像它是 .data 对象上的属性一样,但实际上并非如此。
【解决方案3】:

首先,更改这行代码:

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 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多