Javascript 侦听Ajax调用,而不在Ajax调用iteslf中键入其他代码
我计划了很长一段时间来创建一个JS函数,用于侦听失败的AJAX调用并执行某些操作(例如向单独的服务器报告错误) 我可以在Ajax代码本身的Ajax失败部分调用该函数,但我希望我的同事编写Ajax调用,而无需记住他们需要在Ajax失败部分键入任何内容 e、 g: 我们编写的代码如下:Javascript 侦听Ajax调用,而不在Ajax调用iteslf中键入其他代码,javascript,ajax,events,Javascript,Ajax,Events,我计划了很长一段时间来创建一个JS函数,用于侦听失败的AJAX调用并执行某些操作(例如向单独的服务器报告错误) 我可以在Ajax代码本身的Ajax失败部分调用该函数,但我希望我的同事编写Ajax调用,而无需记住他们需要在Ajax失败部分键入任何内容 e、 g: 我们编写的代码如下: 我们要处理错误的所有调用,请转到预先指定的 ajax_controller2.php所以我们Ajax调用的目标文件是 始终称为ajax\u controller2.php。还有其他AJAX调用,但是 对于不同的ph
- 我们要处理错误的所有调用,请转到预先指定的 ajax_controller2.php所以我们Ajax调用的目标文件是 始终称为ajax\u controller2.php。还有其他AJAX调用,但是 对于不同的php文件,我们不希望为它们处理错误
var ajax = new XMLHttpRequest();
var params = //some parameters here;
ajax.open("POST", "ajax_controller2.php?m=somecase", true);
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax.send(params);
ajax.onreadystatechange = function () {
var response = "";
if (ajax.readyState == 1) {
response += "Status 1: Server connection established ! <br/>";
} else if (ajax.readyState == 2) {
response += "Status 2: Request recieved ! <br/>";
} else if (ajax.readyState == 3) {
response += "Status 3: Processing Request ! <br/>";
} else if (ajax.readyState == 4) {
if (ajax.status == 200) {
var text = ajax.responseText;
} else {
console.log("Ajax failed"); //In this portion of the code I could just type down the name of the function that when triggered, sends an error report.
}
}
}
//If an error occur during the ajax call.
if (ajax.readyState == 4 && ajax.status == 404) {
console.log("Error during AJAX call");
}
}
}
var ajax=new-XMLHttpRequest();
var params=//此处有一些参数;
open(“POST”,“ajax\u controller2.php?m=somecase”,true);
setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
发送(params);
ajax.onreadystatechange=函数(){
var响应=”;
if(ajax.readyState==1){
响应+=“状态1:服务器连接已建立!
”;
}else if(ajax.readyState==2){
响应+=“状态2:已收到请求!
”;
}else if(ajax.readyState==3){
响应+=“状态3:处理请求!
”;
}else if(ajax.readyState==4){
if(ajax.status==200){
var text=ajax.responseText;
}否则{
log(“Ajax失败”);//在代码的这一部分中,我可以键入函数名,当触发时,该函数会发送错误报告。
}
}
}
//如果在ajax调用期间发生错误。
if(ajax.readyState==4&&ajax.status==404){
log(“AJAX调用期间出错”);
}
}
}
您还可以更改XMLHttpRequest的原型,以便在onreadystatechange上插入事件处理程序
在下面的代码中,我使用open
方法并使用addEventListener
,这样它就不会与其他事件监听器混淆或丢失,即使是添加了。onreadystatechange=function…
function errorLoggingFunc(){ console.log('myFunc'); };
XMLHttpRequest.prototype._open = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open= function(){
if(!this._hasErrorLog)
{
this._hasErrorLog = true;
this.addEventListener('readystatechange', errorLoggingFunc);
}
this._open.apply(this, arguments);
};
这样,您的同事将继续使用XMLHttpRequest,但您的日志记录将始终存在。为什么不围绕ajax逻辑编写一个包装函数来进行错误处理,并告诉您的同事使用该函数而不是“原始”ajax代码呢?我不确定这是否是最好的问题,因为您似乎没有具体的问题或错误。尝试一些东西,如果它不起作用,展示你尝试过的东西,并解释它不起作用的方式。问题表明,如果不在失败的ajax代码中键入任何内容,是否可以侦听“原始”ajax调用失败。这就是问题所在。我可以在Ajax状态404中调用errorHandler()。这就是我试图解决的问题。我也要求找到其他的解决办法。我想说的是,您可以将ajax请求的“核心”功能抽象为一些函数(或类)。您声明不希望其他人担心调用错误处理程序。这个解决方案可以实现这一点。你的问题是“我可以在不编写任何SQL(或其他流行的查询语言)的情况下编写查询吗?”简单地说,不,你不能。但是您可以将查询本身抽象为一个函数,这样,例如,您可能只传递表名和ID(或类似的内容)。啊,好的,明白了。我不久前使用了事件分派器和事件侦听器——我只是认为可能存在类似的东西,不需要事件分派——它只侦听正在运行的特定代码部分。这就是我问这个问题时的想法