Javascript AJAX请求是否覆盖了另一个请求?

Javascript AJAX请求是否覆盖了另一个请求?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个动态AJAX函数,它有许多不同的模式(我使用不同的参数调用函数,并通过switch case检查必须使用哪种模式),但当我使用同一个XMLHttpRequest直接调用具有不同参数的AJAX函数时,第二个请求似乎覆盖了第一个请求 可能吗 以下是我的函数(编辑)的示例: 您的请求变量没有使用var关键字定义,这使它成为一个全局变量,因此您正在重用相同的XHR对象 如果您正在重用同一个XMLHttpRequest对象,则“是”,如果您尝试使用它发出另一个请求,而另一个请求正在进行,则它将中止

我有一个动态AJAX函数,它有许多不同的模式(我使用不同的参数调用函数,并通过switch case检查必须使用哪种模式),但当我使用同一个XMLHttpRequest直接调用具有不同参数的AJAX函数时,第二个请求似乎覆盖了第一个请求

可能吗

以下是我的函数(编辑)的示例:


您的
请求
变量没有使用
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(...);
}