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