Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何停止ajax请求(不要等到响应到来)?_Javascript_Ajax - Fatal编程技术网

Javascript 如何停止ajax请求(不要等到响应到来)?

Javascript 如何停止ajax请求(不要等到响应到来)?,javascript,ajax,Javascript,Ajax,如果我使用Ajax发送请求,而此请求需要很长时间。。。。。如果我想发送另一个请求,我该怎么办 当前行为是第二个请求(我做过)等待第一个请求得到响应 注意: 我希望在整个应用程序上执行此行为(任何新请求都会立即执行,而不是等待旧请求首先完成) 我的应用程序使用(Ajax+PHP+jQuery+Symfony) 假设第一个请求需要很长时间: $.ajax ({ type: "GET", url: url1, success: function (html) {

如果我使用Ajax发送请求,而此请求需要很长时间。。。。。如果我想发送另一个请求,我该怎么办

当前行为是第二个请求(我做过)等待第一个请求得到响应

注意: 我希望在整个应用程序上执行此行为(任何新请求都会立即执行,而不是等待旧请求首先完成) 我的应用程序使用(Ajax+PHP+jQuery+Symfony)

假设第一个请求需要很长时间:

$.ajax
({
    type: "GET",
    url: url1,
    success: function (html)
    {
       // do some thing  
    }
});
在任何时候,我都希望执行此请求并终止第一个请求

$.ajax
({
    type: "POST",
    url: url,
    success: function (html)
    {
       // do some thing else 
    }
});


XMLHttpRequest对象具有一个函数。您可以使用中止耗时过长的请求

编辑:如果您不想使用计时器,并且发生了一个新事件,该事件应该中止先前的请求,那么事件处理程序应该执行以下操作

if(!this.request) return;  // request contains the XMLHttpRequest
this.request.onreadystatechange = function() {};
if(this.request.readyState != 4) {
    this.request.abort();
}

然后,您可以创建新的XMLHttpRequest对象。

定义ajax请求变量:

var xhr;
进行ajax调用:

xhr = $.ajax(...);
xhr.abort();
中止ajax调用:

xhr = $.ajax(...);
xhr.abort();

浏览器允许您一次只处理有限数量的对同一主机的请求(我记得是2个还是3个,取决于浏览器)

解决请求计数问题的方法是制作假域名,如img1.domain.com、img2.domain.com等,导致同一主机,并在请求中随机使用它们。然后你可以提出你需要的请求。应根据请求数量选择域计数,以保持在范围内-每个域2个请求。否则,第三个请求将等待其中一个活动完成

它允许您接收来自所有请求的响应。 例如,谷歌使用它来加快图像加载速度

编辑:

示例:您有指向同一位置的和别名。 然后:

然后

$.ajax
({
    type: "POST",
    url: 'http://alias.yourhost.com/somescript2.php',
    success: function (html)
    {
       // do some thing else  
    }
});

这是一种手动过程,但您可以添加一个全局xhr对象,并在每个请求上对其进行测试。如果readystate正在“加载”,请中止它:

var xhr;
var loadUrl = function(url) {
    if ( xhr && xhr.readyState > 0 && xhr.readyState < 4 ) {
        // there is a request in the pipe, abort
        xhr.abort();    
    }
    xhr = $.get(url, function() {
        console.log('success', this);
    });
};

loadUrl('/ajax/');
var-xhr;
var loadUrl=函数(url){
如果(xhr&&xhr.readyState>0&&xhr.readyState<4){
//管道中有一个请求,中止
xhr.abort();
}
xhr=$.get(url,函数(){
console.log('success',this);
});
};
loadUrl('/ajax/');

我一直在研究很多方法,我觉得我找到了一个有效的解决方案。我有一个缓存过程,导致页面挂起直到完成(平均5秒)。是的,这更适合作为CRON作业,但我需要为用户创建缓存过程,而不知道他们用于我的CMS的环境。 我所做的: 在变量内创建调用,然后通过硬删除将其删除。删除此项似乎是在删除等待。这个“黑客”似乎将等待时间从平均5秒延长到325毫秒

var ignore = $.ajax({
    url:something/here.php,
    type: "GET",
    url: url1,
    success: function(){}
});
delete ignore;

我不想用时间来中止请求。。。。我希望在发送另一个请求时终止旧的请求(或者不要等到它的响应出现)只执行新的请求。我可以对任何旧的ajax调用执行该操作吗。因为可能我不知道什么是ajax变量名。。