PDA

View Full Version : Looping through XML returned from PHP


jhulbert
02-18-2010, 06:13 PM
Hello All - new to the forum as of today. Thanks ahead of time for any help.

I'm creating a registration form that contains a 'chain-select' series of ComboBoxes. In other words, select an item in the first CB and display the results from a mysql query in the next CB.

PHP returns the results in an XML String (echo "returnXML="$returnXML;). All is working great up to that point. What I would like to do is loop through the XMLList, running dataP.addItem({label: newData}); for each node. The problem is that the XMLList.length(); function is returning a value of 1.

xmlList.hasComplexContent() returns true which, i believe, would indicate that the XMLList is being created successfully.

Any suggestions as this point would be greatly appreciated. Here's a bare-bones version of the code that should be sufficient for solving this problem.

AS3:

import flash.net.*;
import fl.data.DataProvider;

var dataP:DataProvider = new DataProvider();
var newData:String;
var _param1:String = "state";
var _param2:String;
var _param3:String;
var xml:XML;
var xmlList:XMLList;
var req:URLRequest = new URLRequest ("http://localhost/~jasonhulbert/Sandbox/Forms/POSTMethod/chain_select/getList.php");
var vars:URLVariables = new URLVariables();
var loader:URLLoader = new URLLoader();
var returnData:URLVariables;

stateCombo.dataProvider = dataP;

vars.param1 = _param1;
vars.param2 = _param2;
vars.param3 = _param3;

req.method = URLRequestMethod.POST;
req.data = vars;

loader.addEventListener(Event.COMPLETE, onLoaded);
loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.load(req);

function onLoaded(event:Event){
returnData = new URLVariables(event.target.data);
xml = new XML(returnData.returnXML);
xmlList = new XMLList(xml);
createList(xmlList);
}

function onError(event:Error) {
trace("Oops. A little hiccup on our end. Please try again.");
}

function createList(xmlList:XMLList):void {
for(var i = 0; i < xmlList.length(); i++) {
dataP.addItem( {label: xmlList.*[i]} );
trace(xmlList.*[i]);
}
}

PHP5


<?php

define('DB_HOST', '127.0.0.1');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'MobiData');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('Failed to connect to server: ' . mysql_error());
}

$db = mysql_select_db(DB_DATABASE);
if(!$db) {
die("Unable to select database");
}

$table_name = "malls";
$param = $_POST['param'];


$qry = "SELECT DISTINCT $param FROM $table_name ORDER BY $param";
$res = mysql_query($qry);
$returnXML.="<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?><returnXML>";
while($row = mysql_fetch_row($res)) {
$returnXML .= "<".$param.">".$row[0]."</".$param.">";
}
$returnXML.="</returnXML>";
echo "returnXML=".$returnXML;


?>

jhulbert
02-19-2010, 12:35 AM
returnData = new URLVariables(event.target.data);
xml = new XML(returnData.returnXML);
xmlList = new XMLList(xml);

should have been...

returnData = new URLVariables(event.target.data);
xml = new XML(returnData.returnXML);
xmlList = new XMLList(xml.*);

Minor oversight...major hold-up.

that's how the cookie crumbles.