我正在尝试使用URLLoader
对象从我的Web服务器加载远程内容。
为此,我使用了Adobe帮助中的example代码。
以下是我的尝试:
var loader:URLLoader;
loader = new URLLoader();
configureListeners(loader);
var request:URLRequest = new URLRequest("http://www.fashionboxpk.com/Test2.php");
try
{
loader.load(request);
}
catch (error:Error)
{
trace("Unable to load requested document.");
}
function configureListeners(dispatcher:IEventDispatcher):void
{
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
function completeHandler(event:Event):void
{
var loader:URLLoader = URLLoader(event.target);
trace("completeHandler: " + loader.data);
}
function openHandler(event:Event):void
{
trace("openHandler: " + event);
}
function progressHandler(event:ProgressEvent):void
{
trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}
function securityErrorHandler(event:SecurityErrorEvent):void
{
trace("securityErrorHandler: " + event);
}
function httpStatusHandler(event:HTTPStatusEvent):void
{
trace("httpStatusHandler: " + event);
}
function ioErrorHandler(event:IOErrorEvent):void
{
trace("ioErrorHandler: " + event);
}
但是在编译时,我得到了这个输出:
openHandler: [Event type="open" bubbles=false cancelable=false eventPhase=2]
progressHandler loaded:384 total: 384
Error opening URL 'http://www.fashionboxpk.com/Test2.php'
httpStatusHandler: [HTTPStatusEvent type="httpStatus" bubbles=false cancelable=false eventPhase=2 status=406 responseURL=null]
ioErrorHandler: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://www.fashionboxpk.com/Test2.php"]
那么,我该如何避免这些错误并正确加载该内容?
答案 0 :(得分:0)
您的crossdomain.xml声明只允许在您自己的域中发出请求(并且您无需使用crossdomain.xml从您自己的域中读取)。
因此,如果您尝试通过从服务器加载内容来本地测试它,它将无法正常工作。虽然我认为在这种情况下你应该得到安全沙箱违规错误。
您获得的HTTP状态为406(“不可接受”)。因此,您可以更改您的跨域,以便它允许来自其他域的请求或检查您的服务器设置,如果有关于PHP文件的任何特殊内容。
对于开始,请将其作为您的crossdomain.xml进行测试:
<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
请注意,这允许任何域向您的服务器发送请求,这是一个严重的安全风险。这适用于测试,但您应在此处为生产系统指定显式域