使用PHP在AS3中创建链接



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

我的表(数据库)有以下几行:"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中)?为了显示"价格","信息","邮件"时,我们点击标题(每个标题都有自己的"价格"、"信息"one_answers"邮件",包含在我的数据库中)。

示例:AS3代码显示"Computer"(计算机)。当我点击"ipod Touch"时,它会显示我的数据库中包含的"价格"、"信息"one_answers"邮件"。

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


编辑

因此,在Aaron的帮助下,代码运行得更好一些。

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

为此,我将这个$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. 所有数据作为XML或JSON返回。例如,您可以使用PHP json_encode以JSON的形式返回SQL结果。

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

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

最新更新