jQuery Ajax后刷新页面

9

我正在尝试在jQuery AJAX调用后刷新页面。 似乎页面在所有数据传输完成之前(仅有时)就会刷新。 有人可以看到以下片段的原因吗? 我将刷新代码放在成功函数中,所以感到困惑。

我尝试添加async = false,但也没有起作用。

function sendRating(rating, reload_on_return) {

$.ajax({
    type: "POST",
    dataType: 'json',
    url: window.url_root + cid + "/",
    data: {
        "rating": rating.r2 / 100.0
    },
    success: function(data) {
        if (data.hasOwnProperty('success')) {
            console.log("data was sent!");

            if (reload_on_return) {
                    location.reload();

            }

        }
    },
    error: function() {
        console.log("Data didn't get sent!!");
    }
})

为什么不直接从POST返回您需要在页面上更新的数据,或者调用GET... Post Back对用户来说只会让人感到沮丧。 - abc123
你有任何日志可以展示吗?是什么让你说并非所有数据都已传输? - axelcdv
这看起来是正确的。可能其他代码会导致刷新,或者数据返回后实际上正在发生刷新? - Jonah
1
你如何调用sendRating?是在表单提交时吗? - Nilesh
@Jonah 页面正在刷新,但它应该从服务器获取新数据,但并不总是发生。(但有时会发生) - jaynp
显示剩余2条评论
1个回答

17

您可以使用setTimeout,在刷新执行之前等待几分之一秒钟。

function sendRating(rating, reload_on_return) {

$.ajax({
    type: "POST",
    dataType: 'json',
    url: window.url_root + cid + "/",
    async: false,
    data: {
        "rating": rating.r2 / 100.0
    },
    success: function(data) {
        if (data.hasOwnProperty('success')) {
            console.log("data was sent!");

            if (reload_on_return) {
                setTimeout(
                  function() 
                  {
                     location.reload();
                  }, 0001);    
            }

        }
    },
    error: function() {
        console.log("Data didn't get sent!!");
    }
})

有没有办法在刷新页面后调用新函数? - Kavya Shree

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接