我有一个页面,我已经实现了一个长轮询功能来检查记录的时间戳,所以如果数据已被编辑,它将更新。
<script type="text/javascript">
var poll_url = 'http://mysite.com/poll/;
var my_ts = <?php $_SESSION['template_timestamp']; ?>;
(function poll(){
$.ajax({
url: poll_url,
type: 'post',
success: function(data){
if ((data.ts > 0) {
// check if expired
if (data.ts > my_ts) {
// it has expired, so reload the page
$("#dialog-message").html('Record has been edited.');
// show popup
$("#dialog-message").dialog({
modal: true,
buttons: {
Reload: function() {
$(this).dialog("close");
$('#pleaseWait').show();
window.location.href = '/records/overview';
}
}
});
}
} else {
// is still null
console.log('error');
}
},
dataType: "json",
complete: poll, timeout: 30000
});
})();
</script>
我遇到的问题是还有另一个动作调用JS ajax调用,调用时我想强制长轮询函数停止。
有没有办法做到这一点?
答案 0 :(得分:5)
以下SO问题可能会提供答案...... Abort Ajax requests using jQuery
将其应用于您的代码段,您可能会得到......
<script type="text/javascript">
var poll_url = 'http://mysite.com/poll/';
var my_ts = <?php $_SESSION['template_timestamp']; ?>;
var poll_xhr;
(function poll(){
poll_xhr = $.ajax({
url: poll_url,
type: 'post',
success: function(data){
// Code removed
},
dataType: "json",
complete: poll,
timeout: 30000
});
})();
// To kill the AJAX request, put this where it makes sense
poll_xhr.abort();
</script>