使用 PHP 在 AS3 中创建链接

create links in AS3 with PHP

我有这段代码可以将我的 SQL 数据库中的数据检索到我的 AS3 代码中。

我的 table(数据库)有这些行:"id"、"title"、"price"、"information"、"mail"。

在我的 AS3 代码中我加载了 "title"。

Php代码:

header('Content-type: application/json');
$ts = gmdate("D, d M Y H:i:s") . " GMT";
header("Expires: $ts");
header("Last-Modified: $ts");
header("Pragma: no-cache");
header("Cache-Control: no-cache, must-revalidate");


 $num = mysql_numrows($sql_result);
$phptheTitle = "";
$obj = array();

while ($row = mysql_fetch_array($sql_result)) {
 $theTitle = $row["theTitle"];
   $phptheTitle = $phptheTitle.' </br> '.$theTitle;
    $datas = array();
     $datas['theTitle'] = $row["theTitle"];
     $datas['prix'] = $row["prix"];
      $obj[] = $datas;
 } 

echo json_encode( array('products' => $obj) );

 mysql_free_result($sql_result);
 mysql_close($connection);

?>

AS3代码:

function categorieSelected(evt:Event):void {
                var urlReq:URLRequest = new URLRequest ("http://www.mywebsite.com/find_annonces.php");
                urlReq.method = URLRequestMethod.POST; 
                var urlVars:URLVariables = new URLVariables(); 
                urlReq.data = urlVars;  
                trace("typeSelected");
                urlVars.categorie = evt.target.value;
                trace(urlVars.categorie);
                varLoader2.load(urlReq);


    var loader:URLLoader = new URLLoader (urlReq); 
    loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
    loader.load(urlReq); 
            trace(urlReq);
    loader.addEventListener(Event.COMPLETE, loadComplete);
        }



function loadComplete(evt:Event):void {
    trace("loadComplete");
    var myResult:String = evt.target.data;
    trace(myResult);    
    output_txt.htmlText = myResult;
    var datas     :Object = JSON.parse( myResult );
    var products  :Array = datas && datas.products ? datas.products : [];


var len:int = products.length;
for( var i:int = 0; i<len; ++i ){
     trace( products[i].title, products[i].price );
}
}   

所以我的 output_txt 显示行 "title" 中的所有项目。

现在,是否可以为每个标题(在 AS3 中)创建一个 link? 为了在我们点击标题时显示"price"、"information"、"mail"(每个标题都有自己的"price"、"information"和"mail" ,包含在我的数据库中)。

例子: AS3 代码显示 "Computer"。当我单击 "ipod Touch" 时,它会显示我的数据库中包含的 "price"、"information" 和 "mail"。

这是我想做的事情的简短视频:http://sendvid.com/whdm4sjf


编辑

所以在 Aaron 的帮助下,代码运行得更好了一点。

在我的 AS3 中,用户可以选择 "categorie" 以显示类别中包含的所有标题。

为此我把这个 $categorie = $_POST['categorie']; 放在了 PHP

而这段代码在 AS3 中

var loader5:URLLoader = new URLLoader();
var varLoader2:URLLoader = new URLLoader;
varLoader2.dataFormat=URLLoaderDataFormat.VARIABLES;
varLoader2.addEventListener(Event.COMPLETE,completeHandler2);

        function categorieSelected(evt:Event):void {
                var urlReq:URLRequest = new URLRequest ("http://www.brousse-en-folie.com/sondage/convertXML.php");
                urlReq.method = URLRequestMethod.POST; 
                var urlVars:URLVariables = new URLVariables(); 
                urlReq.data = urlVars;  
                trace("typeSelected");
                urlVars.categorie = evt.target.value;
                varLoader2.load(urlReq);



loader5.load(new URLRequest("http://www.brousse-en-folie.com/sondage/convertXML.php"));
loader5.addEventListener(Event.COMPLETE, complete);

        }

但是似乎在 JSON 加载时发生了冲突,我在函数 categorieSelected

中遇到了这个错误
Error #2101: The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs.

这是该问题的简短视频:http://sendvid.com/18rr26rb

以下是我将要做什么的粗略想法:

  1. Return 所有你的数据为XML或JSON。例如,您可以使用 PHP json_encode 到 return SQL 结果作为 JSON.

  2. 使用URLLoaderJSON.parse将JSON加载到AS3中。

  3. 现在您有一个 Array 数据,您可以遍历并显示列表项。

  4. 向将隐藏列表的每个显示列表项添加一个点击处理程序,并显示详细视图。

您可以通过多种方式完成此操作,这里是一个简单的示例:

PHP

$products = array();

while ($row = mysql_fetch_array($sql_result)) {
    $products[] = array(
        "title" => $row["theTitle"],
        "price" => $row["thePrice"]
    );
} 

echo json_encode($products);

应该像这样输出有效的JSON:

[
    {
        "title": "Product 1",
        "price": 100
    },
    {
        "title": "Product 2",
        "price": 200
    },
    {
        "title": "Product 3",
        "price": 300
    }
]

AS3

加载 JSON 并渲染出来:

var products:Array;

var list:Sprite = new Sprite();
addChild(list);

var details:TextField = new TextField();
addChild(details);

var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("products.php"));
loader.addEventListener(Event.COMPLETE, complete);

function complete(e:Event):void {
    products = JSON.parse(loader.data) as Array;

    for(var i:int = 0; i < products.length; i++){
        createListItem(i, products[i]);
    }

    showList();
}

function createListItem(index:int, item:Object):void {
    var listItem:TextField = new TextField();
    listItem.text = item.title;
    listItem.y = index * 20;
    listItem.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
        showDetails(item);
    });
    list.addChild(listItem);
}

function showList():void {
    details.visible = false;
    list.visible = true;
}

function showDetails(item:Object):void {
    list.visible = false;
    details.visible = true;

    details.text = "Price: " + item.price + "\nInformation: " + item.information + "\nMail: " + item.mail;
}

这只是给你一个想法的粗略的开始。