簡體   English   中英

從 Flash AS3 向 PHP 發送和接收數據

[英]Sending and receiving data from Flash AS3 to PHP

我知道這是經常被問到的問題,但我已經在互聯網上查找了我在用於從 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";    
?>

感謝您的回答。

嘗試

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

更新了完成的功能...並更正了缺失的括號。

您的 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

首先,更改這行代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM