我有这样的代码,可以将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
以下是我要做的大致想法:
-
将所有数据作为XML或JSON返回。例如,您可以使用PHP
json_encode
以JSON的形式返回SQL结果。 -
使用
URLLoader
和JSON.parse
将JSON加载到AS3中。 -
现在您有了数据的
Array
,您可以对其进行迭代并显示列表项。 -
向每个显示列表项添加一个单击处理程序,以隐藏列表并显示详细视图。
你可以通过多种方式实现这一点,这里有一个简单的例子:
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;
}
这只是给你一个想法的一个粗略的开始。