使用 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
以下是我将要做什么的粗略想法:
Return 所有你的数据为XML或JSON。例如,您可以使用 PHP json_encode
到 return 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;
}
这只是给你一个想法的粗略的开始。
我有这段代码可以将我的 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
以下是我将要做什么的粗略想法:
Return 所有你的数据为XML或JSON。例如,您可以使用 PHP
json_encode
到 return 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;
}
这只是给你一个想法的粗略的开始。