2011-03-11 82 views
2

我尝试使用下面做一个跨域GET:为什么dojo.io.script.get()在接收404时执行提供的错误函数?

dojo.io.script.get({ 
    url: myUrl, 
    callbackParamName: "callback", 
    preventCache: true, 
    load: dojo.hitch(this, loadFunction), 
    error: dojo.hitch(this, function() { 
    console.log('Error!!!'); 
    }) 
}); 

负载功能运行正常,然而,当服务器返回404,误差函数不运行。谁能告诉我为什么?

编辑

经过一番研究,我发现,超时和处理程序可以通过以下方式实现:

dojo.io.script.get({ 
    url: myUrl, 
    callbackParamName: "callback", 
    timeout: 2000 
}).then(function(data){ 
    console.log(data); 
}, function(error){ 
    alert(error); 
}); 

这将使用由dojo.Deferred对象提供的功能。

回答

2

当使用脚本标记(dojo.io.script.get所做的)访问服务器时,状态码和标题不可用。

您可以尝试一些其他方式来检测问题,例如使用超时和分析脚本的内容。后者对于JSONP调用是有问题的(就像你的例子)。

+0

谢谢,尤金。我对dojo没有太多的经验,而且我从来没有用jQuery的jsonp插件来解决这个问题,所以这让我大吃一惊。我猜这个插件必须像你建议的一样检查 - 我将不得不采取仔细查看该代码。 – 2011-03-14 11:54:45

0

我意识到这是旧的,但我认为我会分享一个解决方案,以防其他人像我一样,遇到此线程。

dojo.io.script基本上是在您的html页面上添加一个<script/>。如果脚本无法加载onerror事件被称为

var script = document.createElement('script'); 
    script.setAttribute('type', 'text/javascript'); 
    script.setAttribute('src', myUrl); 
    script.onerror = function() { 
     debugger 
    } 
    script.onload = function() { 
     debugger 
    } 
    document.getElementsByTagName('body')[0].appendChild(script); 

这样:所以,你可以试试这个。

*这可能不适用于所有情况,但是一个良好的开端

相关问题