我编写了以下jQuery,用于自动刷新包含轮询的页面(以便不断更新当前获胜选项)
function update() {
var vote_radio = $('input:radio[name=vote_radio]:checked').val();
$.ajax({
type: 'POST',
url: 'index.php',
data: 'refresh=true&maintain_radio='+ vote_radio,
timeout: 2000,
success: function(data) {
$("#current_body").html(data);
$("#notice_div").html('');
$("[name=vote_radio]").filter("[value="+vote_radio+"]").attr("checked","checked");
window.setTimeout(update, 2000);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
$("#notice_div").html('Timeout contacting server..');
window.setTimeout(update, 60000);
}
});
};
$(document).ready(update);
在名为“vote_radio”的页面上有一个radiobutton投票,我还使用以下代码,向Ajax提供服务器的答案:
$(function() {
$('.error').hide();
$('.failure').hide();
$('.success').hide();
$(".vote_submit").click(function() {
if (!$("input[@name='name']:checked").val()) {
$('.error').show();
return false;
}
var vote_radio = $('input:radio[name=vote_radio]:checked').val();;
var dataString = 'vote_radio='+ vote_radio;
$.ajax({
type: "POST",
url: "index.php",
data: dataString,
success: function() {
$('.success').show();
$('.failure').hide();
},
error: function() {
$('.failure').show();
$('.success').hide();
}
});
return false;
});
});
我遇到的问题是,如果用户在页面自动刷新时选择了他们的选项,它会将所选的单选选项放回到页面开始自动刷新时的状态,这令人沮丧。
此外,如果第二个脚本已告知.success类出现,则当第一个脚本自动刷新页面时,它会再次隐藏成功类。
答案 0 :(得分:0)
为什么在启动AJAX调用之前将vote_radio
元素还原为值?
只需在覆盖它之前阅读它,所以你保留当前值(即使它已经改变而未提交)
所以只需将成功回调更改为
success: function(data) {
var vote_radio = $('input:radio[name=vote_radio]:checked').val();
$("#current_body").html(data);
$("#notice_div").empty();
$("[name=vote_radio]").filter("[value="+vote_radio+"]").attr("checked","checked");
window.setTimeout(update, 2000);
}
但是,一般来说,正确的方法是只更新需要更新的页面部分,而不是整个页面......这就是AJAX的全部内容。