为什么 dojo.io.script.get() 在收到 404 时不执行提供的错误函数?

发布于 2024-10-21 12:31:39 字数 697 浏览 4 评论 0原文

我正在尝试使用以下命令进行跨域获取:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

高跟鞋的旋律 2024-10-28 12:31:39

当使用脚本标签访问服务器时(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).

死开点丶别碍眼 2024-10-28 12:31:39

我意识到这已经过时了,但我想我应该分享一个解决方案,以防其他人(像我一样)遇到这个线程。

dojo.io.script 本质上是添加一个

    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);

这样如果脚本加载失败,就会调用 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:

    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);

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文