Javascript AJAX请求是否覆盖了另一个请求?
我有一个动态AJAX函数,它有许多不同的模式(我使用不同的参数调用函数,并通过switch case检查必须使用哪种模式),但当我使用同一个XMLHttpRequest直接调用具有不同参数的AJAX函数时,第二个请求似乎覆盖了第一个请求 可能吗 以下是我的函数(编辑)的示例:Javascript AJAX请求是否覆盖了另一个请求?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个动态AJAX函数,它有许多不同的模式(我使用不同的参数调用函数,并通过switch case检查必须使用哪种模式),但当我使用同一个XMLHttpRequest直接调用具有不同参数的AJAX函数时,第二个请求似乎覆盖了第一个请求 可能吗 以下是我的函数(编辑)的示例: 您的请求变量没有使用var关键字定义,这使它成为一个全局变量,因此您正在重用相同的XHR对象 如果您正在重用同一个XMLHttpRequest对象,则“是”,如果您尝试使用它发出另一个请求,而另一个请求正在进行,则它将中止
您的
请求
变量没有使用var
关键字定义,这使它成为一个全局变量,因此您正在重用相同的XHR对象
如果您正在重用同一个XMLHttpRequest对象,则“是”,如果您尝试使用它发出另一个请求,而另一个请求正在进行,则它将中止上一个请求
在switch语句中,使用var
关键字定义request
。这使得变量的作用域为局部作用域,而不是全局作用域
switch (mode) {
case "test_1":
var request = null;
...
case "test_2":
var request = null;
...
}
或者,只在函数顶部执行一次,而不是在每个case语句中执行一次
如果您有一个全局对象,则有一个更简化的示例:
var xhr = new XMLHttpRequest();
function do_smth(){
xhr.open(...);
}
function do_smth2(){
xhr.open(...);
}
do_smth();
do_smth2();
您需要使XHR对象的作用域正确,以使每个调用具有唯一的XHR,而不是全局
function do_smth(){
var xhr = new XMLHttpRequest();
xhr.open(...);
}
function do_smth2(){
var xhr = new XMLHttpRequest();
xhr.open(...);
}
查看浏览器控制台的“网络”选项卡。这两个请求都在发出,您如何处理响应可能是个问题,但提供的代码没有告诉我们任何事情您的模式切换功能必须与ajax响应同步。否则它将失败。我的请求变量是全局定义的。是的,您需要使用
var request=null代码>在case语句中。
function do_smth(){
var xhr = new XMLHttpRequest();
xhr.open(...);
}
function do_smth2(){
var xhr = new XMLHttpRequest();
xhr.open(...);
}