- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个全局 ajax 错误处理程序,即使 xhr.status 为 200、xhr.statusText 为“OK”并且 xhr.responseText 是我的 JSON 字符串,该处理程序也会运行。这种情况发生在 Firefox 和 IE 中。
$.ajax({
data: {
method: "getRequestDetails",
loggedInUsername: loggedInUsername,
search: search
},
success: function(data){
var arrayObject = eval("(" + data + ")")['DATA'];
if (arrayObject.length == 0){
alert("That search term returned no results");
} else {
callBeforeShow("Results");
$.each(arrayObject, function(index, value){
showJSON(value, "Results");
});
callAfterShow("Results");
}
}
});
$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError){
var errorMessage = "Ajax Error\n";
errorMessage += "Type: " + ajaxOptions.type + "\n";
errorMessage += "Requesting Page: " + ajaxOptions.url + "\n";
errorMessage += "Status: " + XMLHttpRequest.status + " - " + XMLHttpRequest.statusText + "\n";
errorMessage += "Error Thrown: " + thrownError
alert(errorMessage);
});
在 IE 中,这表示 XMLHttpRequest 尚未准备好,在 Firefox 中,这表示返回
“AJAX 错误”“类型:帖子”“请求页面:某事.CFC”“状态:200 - 正常”“抛出错误:未定义”
所以我的解决方法是使用
$(document).ajaxComplete(function(event, XMLHttpRequest, ajaxOptions, errorThrown){
if (XMLHttpRequest.status != 200){
var errorMessage = "Ajax Error\n";
errorMessage += "Type: " + ajaxOptions.type + "\n";
errorMessage += "Requesting Page: " + ajaxOptions.url + "\n";
errorMessage += "Status: " + XMLHttpRequest.status + " - " + XMLHttpRequest.statusText;
alert(errorMessage);
}
});
编辑*这仅在某些情况下发生。大多数时候它可以工作,但有时它会运行 $.ajaxError()*EIDT
{"COLUMNS":["ID","SUMMARY_SPEC","TOTAL_EFFORT","EFFORT_HISTORY","LOG_HISTORY"],"DATA":[[816,"test only","2 Minutes - Last Updated: 09\/12\/2010",{"COLUMNS":["CC_ID","RECORD_ID","USER_ID","USER_NAME","EFFORT_DATE","EFFORT_DAYS","EFFORT_HRS","EFFORT_MINS","EFFORT_TOT_HRS"],"DATA":[[816,496,"ruhlet","Tim Ruhle","December, 09 2010 00:00:00",0,0,1,0.0167],[816,497,"ruhlet","Tim Ruhle","December, 08 2010 00:00:00",0,0,1,0.0167]]},{"COLUMNS":["CC_ID","RECORD_ID","USER_ID","USER_NAME","LOG_DT","LOG_ENTRY"],"DATA":[]}]]}{"COLUMNS":["ID","SUMMARY_SPEC","TOTAL_EFFORT","EFFORT_HISTORY","LOG_HISTORY"],"DATA":[[816,"test only","2 Minutes - Last Updated: 09\/12\/2010",{"COLUMNS":["CC_ID","RECORD_ID","USER_ID","USER_NAME","EFFORT_DATE","EFFORT_DAYS","EFFORT_HRS","EFFORT_MINS","EFFORT_TOT_HRS"],"DATA":[[816,496,"ruhlet","Tim Ruhle","December, 09 2010 00:00:00",0,0,1,0.0167],[816,497,"ruhlet","Tim Ruhle","December, 08 2010 00:00:00",0,0,1,0.0167]]},{"COLUMNS":["CC_ID","RECORD_ID","USER_ID","USER_NAME","LOG_DT","LOG_ENTRY"],"DATA":[]}]]}{"COLUMNS":["ID","SUMMARY_SPEC","TOTAL_EFFORT","EFFORT_HISTORY","LOG_HISTORY"],"DATA":[[816,"test only","2 Minutes - Last Updated: 09\/12\/2010",{"COLUMNS":["CC_ID","RECORD_ID","USER_ID","USER_NAME","EFFORT_DATE","EFFORT_DAYS","EFFORT_HRS","EFFORT_MINS","EFFORT_TOT_HRS"],"DATA":[[816,496,"ruhlet","Tim Ruhle","December, 09 2010 00:00:00",0,0,1,0.0167],[816,497,"ruhlet","Tim Ruhle","December, 08 2010 00:00:00",0,0,1,0.0167]]},{"COLUMNS":["CC_ID","RECORD_ID","USER_ID","USER_NAME","LOG_DT","LOG_ENTRY"],"DATA":[]}]]}
最新版本的firebug将其识别为json。
最佳答案
首先,我强烈建议放弃 eval
部分,转而使用 $.parseJson 或自动处理解析的 dataType:'json'
ajax 选项(出于性能和安全等原因)。如果您确实继续使用 eval
,至少将其包装为 try catch。
我并不完全确定 ajaxError 被调用的每种情况,但我怀疑(基于错误的“随机性”)它与 success 函数内的错误有关(如 eval
被您在响应中收到的无效 javascript 调用)。这可以解释为什么即使有 200 响应它也会被调用。
tldr:从 success
回调中获取 eval
并断言发生此错误时您的响应实际上是有效的 json。
关于ajax - jQuery $.ajaxError() 在 200 上运行 - OK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382958/
我广泛使用 $.get、$.post 和 $.getJSON,所以我想看看 .ajaxError 是如何工作的。我试过这个... $(document).ajaxError(function (e,
我有一堆 ajax 调用,其中包含成功和错误条件,如下所示: $.ajax({ url: 'Remote/State.cfc' ,type: "POST"
我有一个全局 ajaxError 事件,如下所示: $(document).ajaxError(function myErrorHandler(event, xhr, ajaxOptions, thr
我正在尝试处理使用 jQuery 的 Web 应用程序中的 AJAX 错误。 我正在设置一个事件处理程序来处理如下 AJAX 错误: $('body').ajaxError(error_handler
我有一个全局的 $(document).ajaxError 处理程序,它会为我处理大多数错误,以防出现意外的 500 错误或其他错误。但是,有时我想在脚本中本地捕获错误,然后阻止调用该全局错误处理程序
我们使用 jQuery 的全局 ajaxError() 处理程序来提醒用户任何 AJAX 失败: $(document).ajaxError(function() { $("There wa
我正在尝试在我的应用程序中全局处理所有 ajax 异常。 我有一个简单的验证异常,在 ajax post 请求发送到服务器后抛出。 if (string.IsNullOrEmpty(name)) {
我正在尝试为 AJAX 调用实现 jQuery 默认 HTTP 错误处理程序。我已经为一般应用程序错误实现了默认错误处理程序,如下所示: $(document).ajaxError(function(
我发出这样的 AJAX 请求: $.ajax({ url: "/user/logout/", type: 'POST', success: function() { window.
当我使用 $.ajax 调用(在跨域调用时)时,我无法触发 jQuery 的 ajaxError 全局处理程序。有什么办法让它火起来吗? 我在下面包含了一个快速而肮脏的测试(改编自 So how do
在 Jquery 网站上说我应该将 ajaxError 方法附加到一些 html 元素。 这意味着我必须有这样的元素。但我不会用它。 我想要一个全局处理程序来处理所有 ajax 错误消息。 我在这里试
我一直在我的 ajax 表单提交中使用以下代码段: $.ajax({ url: "", data: ilmoittautumisdata, type: "POST", success:function
我目前正在重写所有 ajax 调用以使用 jquery 方法(更简洁的代码!)并声明了默认的 ajaxError 函数,如下所示: $(document).ajaxError(function(eve
我正在构建一个页面,该页面可能会从ajax调用中接收大数量的html,而不是将其插入到页面中。 有时,我会收到一个HTTP 401错误,而不是我期望的HTML。 理想情况下,我希望首先启动错误处理程序
$("html").ajaxError(function (event, jqXHR, ajaxSettings, thrownError){ //show proper message base
在 JavaScript 中,我以这种方式捕获错误: $(document).ajaxError(function(event, jqxhr, settings, thrownError) {
我将其放入 JavaScript 中,并在 $.ajax 中引入了 500 错误,但该例程从未被调用: $('#msg').ajaxError(function(myEvent, jqXHR, aja
我的代码中有很多地方都像这样加载片段: $('').load('/some/thing/', function() { /* put it somewhere */ }); 我还有一个 ajaxErr
我正在尝试删除 $.ajax 错误处理函数并使用 $.ajaxError 代替。一切正常,但我在全局错误处理程序中找不到 textStatus 值。 旧的错误处理: $.ajax({ ...
我有一个全局 ajax 错误处理程序,即使 xhr.status 为 200、xhr.statusText 为“OK”并且 xhr.responseText 是我的 JSON 字符串,该处理程序也会运
我是一名优秀的程序员,十分优秀!