Javascript和jQuery中未定义陷阱函数错误
好的,我确实使用firebug来确定什么时候函数没有在Dev中定义。我想在生产环境中做的是显示一个模式窗口,说明接收到错误,然后在单击时将它们重定向到另一个页面。不那么容易 请理解此函数确实起作用,而称为的组件也起作用。我打算故意拼错函数调用,以证明我没有通过jquery ajax函数收到错误。 我正在使用.ajaxSetup为几个将异步运行的ajax函数设置默认选项:Javascript和jQuery中未定义陷阱函数错误,javascript,jquery,error-handling,Javascript,Jquery,Error Handling,好的,我确实使用firebug来确定什么时候函数没有在Dev中定义。我想在生产环境中做的是显示一个模式窗口,说明接收到错误,然后在单击时将它们重定向到另一个页面。不那么容易 请理解此函数确实起作用,而称为的组件也起作用。我打算故意拼错函数调用,以证明我没有通过jquery ajax函数收到错误。 我正在使用.ajaxSetup为几个将异步运行的ajax函数设置默认选项: $.ajaxSetup({ type: "POST", dataType: "json", url:
$.ajaxSetup({
type: "POST",
dataType: "json",
url: "DMF.cfc",
data: {
qID: 1,
returnFormat: "json"
},
beforeSend: function() {
$('#loadingmessage').fadeIn(); // show the loading message.
},
complete: function() {
$('#loadingmessage').fadeOut(); // show the loading message.
}
}); //end AjaxSetup
实际的ajax调用是:
$.ajax({
data: {
method: 'getCurrentIssues'
},
success: function(response) {
nsNewDebtshowDebtIssues(response);
},//end success function
error: function(jqXHR, exception) {
alert("Error running nsNewDebt.showDebtIssues");
}
}) //end getCurrentIssues Ajax Call
我强制执行的错误是,在success函数中运行的方法实际上应该是nsNewDebt.showdebteissues。Firebug在控制台中正确显示错误nsNewDebtshowDebtIssues未定义,但ajax调用的实际错误消息未运行,因此如果最终用户正在运行该页面,则该页面将显示为挂起
因此,总而言之,我想知道如何跟踪何时发生这样的错误,最好放在.ajaxSsetup的error部分,但如果每个.ajax调用都需要这样做。在调用之前,您可以执行以下操作:
if(typeof nsNewDebtshowDebtIssues == 'function') {
// .. call it ..
}
这不是ajax错误,因此无法通过
ajaxError
方法处理它
你应该尝试一下成功的方法
success: function(response) {
try {
nsNewDebtshowDebtIssues(response);
} catch (ex) {
//exception occured
//alert("Error running nsNewDebt.showDebtIssues");
alert( ex.message + '\n\tin file : ' + ex.fileName + '\n\t at line : ' + ex.lineNumber);
}
}
实际上,错误发生在AJAX调用成功之后(因为它来自
success
处理程序),因此error
处理程序实际上不会被调用
如果您希望对实际的AJAX请求错误和源于成功
处理程序的其他错误使用相同的处理程序,则可以定义一个命名函数,并将其用作错误
处理程序和成功
处理程序中的try
/catch
块:
function handleError(jqXHR, status, exception)
{
alert("Error running request.");
// Or print something from 'jqXHR', 'status' and 'exception'...
}
$.ajax({
data: {
method: "getCurrentIssues"
},
success: function(response, status, jqXHR) {
try {
nsNewDebtshowDebtIssues(response);
} catch (x) {
handleError(jqXHR, status, x);
}
},
error: handleError
});
在
try{…}catch(err){…}
块中将代码包装在“success”函数中怎么样?这无疑是最灵活的解决方案,尽管它们都没有错。这考虑到我希望有一个错误函数来控制所有错误。谢谢大家。