为什么 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
对象提供的功能。
I am trying to use the following to do a cross-domain get:
dojo.io.script.get({
url: myUrl,
callbackParamName: "callback",
preventCache: true,
load: dojo.hitch( this, loadFunction ),
error: dojo.hitch( this, function() {
console.log('Error!!!');
})
});
The load function runs fine, however, when the server returns a 404, the error function does not run. Can anyone tell me why?
EDIT
After some investigation, I found that a timeout and handler could be implemented in the following way:
dojo.io.script.get({
url: myUrl,
callbackParamName: "callback",
timeout: 2000
}).then(function(data){
console.log(data);
}, function(error){
alert(error);
});
This uses functionality provided by the dojo.Deferred
object.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当使用脚本标签访问服务器时(
dojo.io.script.get
的作用),状态代码和标头不可用。您可以尝试其他一些方法来检测问题,例如使用超时和分析脚本的内容。后者对于 JSONP 调用来说是有问题的(就像在您的示例中一样)。
When accessing server with script tags (that what
dojo.io.script.get
does), status code and headers are not available.You may try some other ways to detect a problem, like using a timeout and analyzing a content of a script. The latter is problematic for JSONP calls (like in your example).
我意识到这已经过时了,但我想我应该分享一个解决方案,以防其他人(像我一样)遇到这个线程。
dojo.io.script
本质上是添加一个到您的 html 页面。所以你可以尝试这个:
这样如果脚本加载失败,就会调用
onerror
事件。*这可能并不适用于所有情况,但这是一个好的开始
I realize this is old but I thought I'd share a solution in case others, like I had, come across this thread.
dojo.io.script
is essentially adding a<script/>
to your html page. So you can try this:That way if the script fails to load the
onerror
event is called.*This may not work in every instance but is a good start