Actionscript 3 — создание ссылок в AS3 с переполнением стека

У меня есть этот код, который извлекает данные из моей базы данных SQL в мой код AS3.

Моя таблица (база данных) имеет следующие строки: «id», «title», «price», «information», «mail».

В моем коде AS3 я загрузил «заголовок».

Код 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)?
Для того, чтобы отображать «цену», «информацию», «почту», когда мы нажимаем на заголовок (каждый заголовок имеет свои собственные «цена», «информация» и «почта», содержатся в моей базе данных).

Пример:
Код AS3 отображает «Компьютер». Когда я нажимаю «ipod Touch», отображаются «цена», «информация» и «почта», которые содержатся в моей базе данных.

Вот короткое видео того, что я хотел бы сделать: http://sendvid.com/whdm4sjf


РЕДАКТИРОВАТЬ

Таким образом, с помощью Аарона код работает немного лучше.

В моем 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

Решение

Вот примерное представление о том, что я буду делать:

  1. Вернуть все ваши данные в виде XML или JSON. Например, вы можете использовать PHP json_encode вернуть результаты SQL в виде JSON.

  2. Загрузите JSON в AS3, используя URLLoader а также JSON.parse,

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

Это просто грубое начало, чтобы дать вам идею.

1

Другие решения

Других решений пока нет …