无法从 Flash 访问 PHP 中的 XML 变量?
Can't Access XML variable in PHP from Flash?
我正在将一些信息从 PHP 发送到闪存,并将一些不同的信息从 PHP 发送回闪存。我将一个用户 ID 发送到 PHP,并将一个 XML 变量和一个索引发送回 Flash。
闪现代码:
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest(/*private info*/);
myRequest.method = URLRequestMethod.POST;
var memberInfo:URLVariables = new URLVariables();
memberInfo.member_id = 1817;
myRequest.data = memberInfo;
myLoader.addEventListener(Event.COMPLETE, onXMLLoad);
myLoader.load(myRequest);
function onXMLLoad(event:Event)
{
var newXML:XML = new XML(event.currentTarget.data.xml);
var index:int = new int(event.currentTarget.data.index);
}
PHP:
$xml = new DOMDocument("1.0");
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$presets = $xml->createElement("presets");
$red = $xml->createElement("colors", "0xff0000");
$green = $xml->createElement("colors", "0x00ff00");
$blue = $xml->createElement("colors", "0x0000ff");
$presets->appendChild($red);
$presets->appendChild($green);
$presets->appendChild($blue);
$xml->appendChild($presets);
$index = 3;
echo $xml->saveXML();
echo $index;
当我这样做时,我得到这个错误:
ReferenceError: Error #1069: Property xml not found on String and there is no default value.
我该如何解决这个问题?我认为这与 XML 实际上是一个字符串有关,但我不太确定。
这是 PHP 的输出:
<?xml version="1.0"?>
<presets>
<colors>0xff0000</colors>
<colors>0x00ff00</colors>
<colors>0x0000ff</colors>
</presets> 3
注:
如果我从 PHP 中删除索引变量并且只将 "xml" 作为发送到 Flash 的唯一内容,我可以使用 "event.currentTarget.data" 访问它并且它会正常工作。
快闪:
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest(/*private info*/);
myRequest.method = URLRequestMethod.POST;
var memberInfo:URLVariables = new URLVariables();
memberInfo.member_id = 1817;
myRequest.data = memberInfo;
myLoader.addEventListener(Event.COMPLETE, onXMLLoad);
myLoader.load(myRequest);
function onXMLLoad(event:Event)
{
var newXML:XML = new XML(event.currentTarget.data);
}
PHP:
$xml = new DOMDocument("1.0");
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$presets = $xml->createElement("presets");
$red = $xml->createElement("colors", "0xff0000");
$green = $xml->createElement("colors", "0x00ff00");
$blue = $xml->createElement("colors", "0x0000ff");
$presets->appendChild($red);
$presets->appendChild($green);
$presets->appendChild($blue);
$xml->appendChild($presets);
echo $xml->saveXML();
问题出在 PHP 的输出上。
显示的输出无效 xml(因为末尾有 3
)。
这就是当您删除索引时它起作用的原因。
要纠正它,要么将索引放在 xml 中(可能作为根 presets
节点的属性),要么在将其转换为 [=63= 之前解析输出] AS3 中的对象,像这样:
var response:String = event.currentTarget.data;
var index:String = response.substr(response.lastIndexOf(">") + 1);
var newXML:XML = new XML(response.substring(0, response.lastIndexOf(">") + 1));
如果您希望能够将变量作为对象访问数据 属性(例如 event.currentTarget.data.xml
& event.currentTarget.data.index
,那么您需要执行以下操作:
将 URLLoader 的 dataFormat
属性 设置为 URLLoaderDataFormat.VARIABLES
,这样它就知道如何解析响应了。
从 PHP 发送一个 url 可变格式的字符串。因此,您来自 php 的回复需要如下所示:
xml=<xml></xml>&index=3
其中 <xml></xml>
替换为完整的 xml。请记住,所有数据都需要遵循 url 变量格式规则,因此您可能需要使用 escape
(或 PHP 中的 rawurlencode
)和 unescape
(在 AS3 中)关于值
我认为 php 应该是这样的:
echo "xml=".$xml->saveXML();
echo "&index=".$index;
虽然更简单,可能只使用 JSON 并在 PHP 中创建一个对象并执行 echo json_encode(obj)
,然后在 flash 中执行 var response:Object = JSON.parse(event.currentTarget.data);
我正在将一些信息从 PHP 发送到闪存,并将一些不同的信息从 PHP 发送回闪存。我将一个用户 ID 发送到 PHP,并将一个 XML 变量和一个索引发送回 Flash。
闪现代码:
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest(/*private info*/);
myRequest.method = URLRequestMethod.POST;
var memberInfo:URLVariables = new URLVariables();
memberInfo.member_id = 1817;
myRequest.data = memberInfo;
myLoader.addEventListener(Event.COMPLETE, onXMLLoad);
myLoader.load(myRequest);
function onXMLLoad(event:Event)
{
var newXML:XML = new XML(event.currentTarget.data.xml);
var index:int = new int(event.currentTarget.data.index);
}
PHP:
$xml = new DOMDocument("1.0");
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$presets = $xml->createElement("presets");
$red = $xml->createElement("colors", "0xff0000");
$green = $xml->createElement("colors", "0x00ff00");
$blue = $xml->createElement("colors", "0x0000ff");
$presets->appendChild($red);
$presets->appendChild($green);
$presets->appendChild($blue);
$xml->appendChild($presets);
$index = 3;
echo $xml->saveXML();
echo $index;
当我这样做时,我得到这个错误:
ReferenceError: Error #1069: Property xml not found on String and there is no default value.
我该如何解决这个问题?我认为这与 XML 实际上是一个字符串有关,但我不太确定。
这是 PHP 的输出:
<?xml version="1.0"?>
<presets>
<colors>0xff0000</colors>
<colors>0x00ff00</colors>
<colors>0x0000ff</colors>
</presets> 3
注: 如果我从 PHP 中删除索引变量并且只将 "xml" 作为发送到 Flash 的唯一内容,我可以使用 "event.currentTarget.data" 访问它并且它会正常工作。
快闪:
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest(/*private info*/);
myRequest.method = URLRequestMethod.POST;
var memberInfo:URLVariables = new URLVariables();
memberInfo.member_id = 1817;
myRequest.data = memberInfo;
myLoader.addEventListener(Event.COMPLETE, onXMLLoad);
myLoader.load(myRequest);
function onXMLLoad(event:Event)
{
var newXML:XML = new XML(event.currentTarget.data);
}
PHP:
$xml = new DOMDocument("1.0");
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$presets = $xml->createElement("presets");
$red = $xml->createElement("colors", "0xff0000");
$green = $xml->createElement("colors", "0x00ff00");
$blue = $xml->createElement("colors", "0x0000ff");
$presets->appendChild($red);
$presets->appendChild($green);
$presets->appendChild($blue);
$xml->appendChild($presets);
echo $xml->saveXML();
问题出在 PHP 的输出上。
显示的输出无效 xml(因为末尾有 3
)。
这就是当您删除索引时它起作用的原因。
要纠正它,要么将索引放在 xml 中(可能作为根 presets
节点的属性),要么在将其转换为 [=63= 之前解析输出] AS3 中的对象,像这样:
var response:String = event.currentTarget.data;
var index:String = response.substr(response.lastIndexOf(">") + 1);
var newXML:XML = new XML(response.substring(0, response.lastIndexOf(">") + 1));
如果您希望能够将变量作为对象访问数据 属性(例如 event.currentTarget.data.xml
& event.currentTarget.data.index
,那么您需要执行以下操作:
将 URLLoader 的
dataFormat
属性 设置为URLLoaderDataFormat.VARIABLES
,这样它就知道如何解析响应了。从 PHP 发送一个 url 可变格式的字符串。因此,您来自 php 的回复需要如下所示:
xml=<xml></xml>&index=3
其中
<xml></xml>
替换为完整的 xml。请记住,所有数据都需要遵循 url 变量格式规则,因此您可能需要使用escape
(或 PHP 中的rawurlencode
)和unescape
(在 AS3 中)关于值我认为 php 应该是这样的:
echo "xml=".$xml->saveXML(); echo "&index=".$index;
虽然更简单,可能只使用 JSON 并在 PHP 中创建一个对象并执行 echo json_encode(obj)
,然后在 flash 中执行 var response:Object = JSON.parse(event.currentTarget.data);