【问题标题】:How to catch $() error in jquery如何在 jquery 中捕获 $() 错误
【发布时间】:2018-08-06 06:22:37
【问题描述】:

好的,所以我想做一个简单的“网络抓取”应用程序;

我有这个简单的代码:

$.ajax({ url: 'http://sentence.yourdictionary.com/example',
    success: function(data) {
        var elements = $(data)   //<--error here        
    } 
});

<h1>the html does not matter</h1>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src ='error.js'></script>

这行得通,我得到了元素,但是,我将运行它多达 100000 次,并且会弹出这个错误并使调试变得痛苦。

GET file:///images/side-rail-slot-4-chosen-min.png net::ERR_FILE_NOT_FOUND

错误出现在 $(data) 调用中。

我试过了:

$(data).error(function(e){/*do nothig*/})
$(data).on('error',function(e){/*do nothig*/})

我什至进入了 jquery 文件,尝试在某个地方插入一个 try-catch ....。但错误仍然存​​在。

【问题讨论】:

  • 将错误处理程序添加到 ajax 调用..
  • 如果需要,你也可以在 JS 中尝试 { } catch()。
  • @Andrew try catch 不适用于异步调用
  • 很抱歉,我没有解释错误的来源。它不是来自 $.ajax,而是来自 $(data)。我不能给它添加一个 try catch 因为它是异步的
  • 为什么不能将try/catch 放在成功回调中? try { var elements = $(data); } catch(e) { /* do nothing */}

标签: javascript jquery error-handling


【解决方案1】:

您需要设置一个错误处理程序,就像成功处理程序一样:

$.ajax({ url: 'http://sentence.yourdictionary.com/example',
  success: function(data) {
    console.log(data)
    var elements = $(data)           
  },
  error: function(err) {
    console.log(err)
  } 
});

这是我在 jsfiddle 上找到的一个实现:

https://jsfiddle.net/Sk8erPeter/AGpP5/

编辑(@mhodges 来自 cmets 的补充):

只有400 或更高的 HTTP 状态码才会调用错误回调。可能会发生一些不会被错误捕获的错误情况。

【讨论】:

  • 请注意:error 回调只会在 HTTP 状态码为 400 或更高时调用。 error 回调无法捕捉到的几种错误情况可能发生。
  • 是的,这当然是真的。 200 附带的错误需要在 success 处理程序中检查
  • 我在 $.ajax 调用中有一个错误处理程序,它很少被使用,它不是错误的来源。我已经编辑了我的帖子以使其更清楚。
  • @Doopdon 您的示例中没有错误处理程序。如果执行脚本“10000”次后出现GET file:///images/side-rail-slot-4-chosen-min.png net::ERR_FILE_NOT_FOUND,似乎是连接问题引起的。 404 表示“未找到”。我没听错吗?
  • @messerbill 我想我们在不同的页面上。错误与 $.ajax 无关,它运行良好。当我尝试解析 HTML 时出现错误。我仍然得到我想要的。但我遇到了很多错误。我现在正在尝试在 jsbin 中启动并运行它,所以请稍等。
【解决方案2】:

罪魁祸首似乎是

<div class="spanish_ad center">
  <a href="http://spanish.yourdictionary.com/">
    <img src="/images/side-rail-slot-4-chosen-min.png" width="300" height="250" nopin="nopin">
  </a>
</div>

所有其他图像都以http://cf.ydcdn.net/latest/ 为前缀,因此我尝试将其添加到 URL 中,并且效果很好。

这可能会让人觉得有点 hacky,但你可以在那个文本上做一个字符串替换,像这样:

var newData = data.replace('src="/images/', 'src="http://cf.ydcdn.net/latest/images/');
var elements = $(newData);

【讨论】:

  • 我想这很好,谢谢。它确实感觉很hacky,但它只需要运行几十次。我只需要查看错误以获取我需要的信息。
猜你喜欢
  • 2013-09-22
  • 2013-05-19
  • 2010-10-19
  • 1970-01-01
  • 2019-11-09
  • 2016-10-17
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多