2013-05-10 72 views
28

我知道如何接收服务器数据或错误。有很多方法。例如:防止未处理的jQuery AJAX错误

$.ajax({ 
    type: "get", 
    url: "/widgets/", 
    success: function (data, text) { 
     console.log('this is a data'); 
    }, 
    error: function (request, status, error) { 
     console.log('this is an error'); 
    } 
}); 

请参阅本图片:

result in chrome developer console

我有我的误差函数和我做什么,我需要在那里。 如何防止第一行中的错误。 我已经测试过4xx和5xx错误但没有区别。 我知道最终用户在隐藏开发者控制台时看不到这个错误。

我需要这个来设计一个API。 我知道,我可以从服务器发送200个回应与显示,这是一个错误,或者是成功的结果,一个额外的参数。

但如果我可以给4XX或者5XX响应那么就没有必要额外的参数。 这种方式对我来说有一些额外的收益。例如,我可以将成功结果应用于我的客户端模型,而不用担心其他参数。

谢谢

+0

jQuery的1.9.1.js:8526 '//这可能会引发异常是actually' '//在jQuery.ajax(所以没有的try/catch在这里)'' 处理xhr.send( (s.hasContent && s.data)|| null);' – iman 2013-05-10 12:16:37

+4

在'try/catch'中包装'xhr.send'确实不会**阻止在开发者控制台显示错误。请注意,这些是* not * JS错误/异常,但与浏览器发出的* request *有关,所以试图捕获JS错误将不起作用。 – gkalpak 2013-05-10 14:08:46

+0

尝试这样的回答:http://stackoverflow.com/questions/7436195/disabling-some-jquery-global-ajax-event-handlers-for-a-request – JVE999 2014-08-10 23:14:30

回答

12

AFAIK你不能让红一样的东西走开,返回错误状态码(4XX,5XX)时。它们被浏览器用来指示某些事情可能没有像预期的那样发生。尽管如此,这些仅仅是装饰品,因为4xx和5xx状态码完全有效,所以我没有看到你想要消除它们的理由。

正如你所说,你的另一种选择是发送“200响应从服务器的额外参数,这表明这是一个错误或成功的结果”。

我肯定推荐使用虽然4XX和5XX代码(这是他们设计的),并停止担心浏览器的对决在开发者控制台的警告(又名红一样的东西)。

另请参阅thisthis提取其他类型资源(图像,文件等)时引用类似错误的问题。您看到的错误实际上具有相同的性质。

+2

有一种情况是这将是很好,以避免报告以下错误:测试(特别是Web应用程序的无头测试)。例如,你编写了一个测试(比如mocha-phantonJS)来查找失败的ajax请求。令人讨厌的是,所有这些错误都出现在测试总结中。 – emepyc 2014-03-04 14:20:20

+0

我看到一个检查,如果一个页面存在,并且红色的错误使它看起来像出事了,所以这将是很好的压制它。 – JVE999 2014-08-10 23:12:59

+1

@ JVE999:我的答案成立。不要成为“红色恐惧症”! 4xx和5xx是有效的代码,你无法做任何关于浏览器如何选择登录它们(也不应该担心它)。如果你太在意用户打开控制台和错误判断你的应用程序,由于红一样的东西,也许你可以记录一些消息来解释它,并让他们知道它的预期行为。 – gkalpak 2014-08-11 05:14:07