我已经有了这段代码,可以将我的SQL数据库中的数据检索到我的AS3代码中。
我的表格(数据库)有以下行:" id"," title"," price"," information",& #34;邮件&#34 ;.
在我的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显示行中的所有项目&#34; title&#34;。
现在,是否可以为每个标题创建一个链接(在AS3中)? 为了显示&#34;价格&#34;,&#34;信息&#34;,&#34;邮件&#34;当我们点击标题时(每个标题都有自己的&#34;价格&#34;,&#34;信息&#34;和&#34; mail&#34;,包含在我的数据库中)。
例如: AS3代码显示&#34;计算机&#34;。当我点击&#34; ipod Touch&#34;它显示&#34;价格&#34;,&#34;信息&#34;和&#34;邮件&#34;包含在我的数据库中。
以下是我想做的简短视频:http://sendvid.com/whdm4sjf
修改
所以在Aaron的帮助下,代码工作得更好一些。
在我的AS3中,用户可以选择&#34;类别&#34;为了显示类别中包含的所有标题。
为此我已将此$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
答案 0 :(得分:1)
以下是我要做的事情的粗略概念:
将您的数据全部返回为XML或JSON。例如,您可以使用PHP json_encode
将SQL结果作为JSON返回。
使用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;
}
这只是一个粗略的开始,可以给你一个想法。