gpt4 book ai didi

ajax - jQuery $.ajaxError() 在 200 上运行 - OK

转载 作者:行者123 更新时间:2023-12-03 22:26:44 28 4
gpt4 key购买 nike

我有一个全局 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com