duandunzhuo3234 2016-01-12 20:52
浏览 53
已采纳

使用PHP在AS3中创建链接

I've got this code that retrieve data from my SQL Data Base into my AS3 code.

My table (data base) has this rows : "id", "title", "price", "information", "mail".

In my AS3 code I loaded "title".

Php Code :

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 code :

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

So my output_txt is displaying all items in the row "title".

Now, is it possible to create a link for each title(in AS3) ? In order to display "price", "information", "mail" when we click on the title(each title has their own "price", "information" and "mail", contain in my database).

Exemple : The AS3 code displays "Computer". When I click on "ipod Touch" it displays "price", "information" and "mail" that is contains in my database.

Here's a short video of what I'd like to do : http://sendvid.com/whdm4sjf


EDIT

So with the help of Aaron, the code works a little bit better.

In my AS3, the user can choose a "categorie" in order to displays all the titles contains in the categorie.

For that I've put this $categorie = $_POST['categorie']; in PHP

And this code in 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);

        }

But it seems that with the JSON loading, there is a conflict and I've got this error with the function categorieSelected

Error #2101: The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs.

Here's a short video of the problem : http://sendvid.com/18rr26rb

  • 写回答

1条回答 默认 最新

  • doufeng3602 2016-01-13 17:28
    关注

    Here's a rough idea of what I would do:

    1. Return all your data as XML or JSON. For example you can use PHP json_encode to return the SQL results as JSON.

    2. Load the JSON into AS3 using URLLoader and JSON.parse.

    3. Now you have an Array of data you can iterate over and display list items.

    4. Add a click handler to each display list item that will hide the list, and show a detailed view.

    You can accomplish this many ways, here's one simple example:

    PHP

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

    Which should output valid JSON like this:

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

    AS3

    Load the JSON and render it out:

    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 + "
    Information: " + item.information + "
    Mail: " + item.mail;
    }
    

    This is just a rough start to give you an idea.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码