好的,有点古怪。我在AS3中有一个简单的URLLoader,用于加载外部XML文档。它加载得很好,我在Charles得到了正确的302 Not Modified响应,但flash告诉我:
“找不到网址”
以下是相关代码:
//=============================================================================================
public function openXML(name:String):void { //decides what XML data feed and opens it
//=============================================================================================
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
//add event listener to URLLoader to call closeXML upon completion
xmlLoader.addEventListener(Event.COMPLETE, closeXML);
xmlLoader.load(new URLRequest("http://www.gessnerengineering.com/projects"));
//=========================================================
function closeXML(e:Event):void {
//=========================================================
xmlData = new XML(xmlLoader.data);
xmlLoader.removeEventListener(Event.COMPLETE, closeXML);
drawPage(name, xmlData);
}
}
根据调试器的问题行在:
xmlLoader.load(new URLRequest("http://www.gessnerengineering.com/projects"));
我已经确认我可以通过浏览器和cURL浏览到该URL,而Charles表示我的SWF可以和IS成功访问它。但是,我仍然会收到此URL Not Found错误。根据{{3}},这是使用URLLoader加载外部数据(包括XML)的绝对正确方法。
更新了代码答案 0 :(得分:2)
我发现你的代码结构有点奇怪 - 你为什么在函数内部有函数?
我重写了这样的代码并且它工作得非常好(我只是在flash的时间轴上运行它因为我懒得设置一个新项目):
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML();
var request:URLRequest = new URLRequest("http://www.gessnerengineering.com/projects");
request.method = URLRequestMethod.GET;
//=============================================================================================
function openXML(name:String):void { //decides what XML data feed and opens it
//=============================================================================================
//add event listener to URLLoader to call closeXML upon completion
xmlLoader.addEventListener(Event.COMPLETE, closeXML);
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
xmlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityError);
xmlLoader.load(new URLRequest("http://www.gessnerengineering.com/projects"));
}
function onIOError(e:IOErrorEvent):void {
trace("Error loading URL.");
}
function securityError(e:SecurityErrorEvent):void {
trace("security error");
}
function closeXML(e:Event):void {
trace('xmlLoader.data ' + xmlLoader.data);
xmlData = new XML(xmlLoader.data);
xmlLoader.removeEventListener(Event.COMPLETE, closeXML);
}
openXML('ljkl');
答案 1 :(得分:1)
在不知道所有细节的情况下,假设您正确实施了RESTful服务,您的URLRequest可能使用错误的方法(POST,而不是GET)调用服务。
查看本教程关于从Actionscript 3调用RESTful服务:
Consuming REST web Services in ActionScript 3
它有一些关于设置请求类型和处理可能弹出的其他一些问题的好信息(比如设置返回数据类型等)。