Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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_Php_Jquery_Ajax - Fatal编程技术网

Javascript 如何正确停止ajax请求

Javascript 如何正确停止ajax请求,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我试图在用户单击按钮时停止Ajax请求。但即使我使用了.abort();ajax会每2秒发出一次请求。基本上,用户等待来自服务器的输入。如果响应为2,则需要在2秒钟后调用ajax请求。如果回答是3,那么是好的。不再调用该函数 我尝试了不同的解决方案;完全改变了ajax…等等,没有一个解决方案成功。我想我缺少了一些概念 ////////////////////// index.php . <button id="cancel" onclick="CancelRequest()">Ca

我试图在用户单击按钮时停止Ajax请求。但即使我使用了.abort();ajax会每2秒发出一次请求。基本上,用户等待来自服务器的输入。如果响应为2,则需要在2秒钟后调用ajax请求。如果回答是3,那么是好的。不再调用该函数

我尝试了不同的解决方案;完全改变了ajax…等等,没有一个解决方案成功。我想我缺少了一些概念

////////////////////// index.php 
.
<button id="cancel" onclick="CancelRequest()">Cancel</button>
.
<script>
function CheckStatus(){

var jqXHR = $.ajax({ 
   url: "status.php",
   async: true,
   cache: false,
   type: "POST",
   data: {data: id},
   success: function(response){
      var response;
if (response == 2) {
    alert(response);
    setTimeout(CheckStatus, 2000);   /// NEED TO SEND THE REQUEST AJAX REQUEST AGAIN, the response needs to be 3
} else if (response == 3) { 
    alert("good");
} else {
    alert("error");
}     
}
}); 

}

CheckStatus(); // start ajax automatically
}


//cancel request if the user press a button

function CancelRequest() {
    jqXHR.abort();

}
</script>


///////////////////////////////////// status.php 

$number = $_POST['id'];
.
.
.
.
$number = 2;

if ($number['status'] === 3) {
    echo "good";
} elseif ($result['status'] == 2) {
    echo "repeat again";
} else {
    echo "error";
}

I expect that when I call jqXHR.abort(); the ajax should stop. However it keep going forever.
//index.php
.
取消
.
函数CheckStatus(){
var jqXHR=$.ajax({
url:“status.php”,
async:true,
cache:false,
类型:“POST”,
数据:{data:id},
成功:功能(响应){
var反应;
如果(响应==2){
警报(响应);
setTimeout(CheckStatus,2000);///需要再次发送请求AJAX请求,响应需要为3
}如果(响应==3){
警惕(“良好”);
}否则{
警报(“错误”);
}     
}
}); 
}
CheckStatus();//自动启动ajax
}
//如果用户按下按钮,则取消请求
函数CancelRequest(){
jqXHR.abort();
}
/////////////////////////////////////status.php
$number=$_POST['id'];
.
.
.
.
$number=2;
如果($number['status']==3){
呼应“好”;
}elseif($result['status']==2){
回声“重复”;
}否则{
回声“错误”;
}
我希望在调用jqXHR.abort()时;ajax应该停止。然而,它会一直持续下去。

CheckStatus()函数之外声明变量
jqXHR


var-jqXHR;
函数CheckStatus(){
jqXHR=$.ajax({
url:“status.php”,
async:true,
cache:false,
类型:“POST”,
数据:{data:id},
成功:功能(响应){
var反应;
如果(响应==2){
警报(响应);
setTimeout(CheckStatus,2000);///需要再次发送请求AJAX请求,响应需要为3
}如果(响应==3){
警惕(“良好”);
}否则{
警报(“错误”);
}     
}
}); 
}
CheckStatus();//自动启动ajax
}
//如果用户按下按钮,则取消请求
函数CancelRequest(){
jqXHR.abort();
}

如果你忘了IE和jQuery,那么:我想你可以试试
CancelRequest
。谢谢你的回复,但我想我没有收到。基本上,用户登录index.php。js脚本发送请求以检查服务器是否得到了答案,但是用户可以通过单击按钮来决定停止。我不明白为什么ajax一直在运行。谢谢,阿加尼,我不认为问题出在ajax上。当您取消ajax时,有时在事件循环中有一个事件
CheckStatus
wait 2s来运行,它会使ajax保持运行。使用clearTimeout清除此事件。尝试一下,当您不使用clearTimeout时,ajax保持运行这里已经给出的答案。。。