Javascript 如何正确停止ajax请求
我试图在用户单击按钮时停止Ajax请求。但即使我使用了.abort();ajax会每2秒发出一次请求。基本上,用户等待来自服务器的输入。如果响应为2,则需要在2秒钟后调用ajax请求。如果回答是3,那么是好的。不再调用该函数 我尝试了不同的解决方案;完全改变了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
////////////////////// 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保持运行这里已经给出的答案。。。