ajax调用后元素上的就绪事件未被重新激活

时间:2014-07-02 09:47:56

标签: jquery ajax asp.net-mvc

我需要每隔几秒刷新一次textarea元素。我的解决方案涉及使用jquery ajax调用$("#element").ready内的控制器内的refresh方法。我希望在通话结束后,ready事件将被重新启动,但遗憾的是,这不会发生。这是我的javascript代码:

$("#logTextArea").ready(function () {
    alert("ready!");
    setTimeout(reloadLogBox(), 5000);
});

function reloadLogBox() {
    $.ajax({
        url: '/json/AdminsStartUpdate/RefreshLogBox',
        type: "Post",
        success: function (response) {
            alert(response);
            $("#logTextArea").html = response;
        }
    });
}

和控制器方法(C#代码):

    [HttpPost]
    public JsonResult RefreshLogBox()
    {//breakpoint here
        //TODO : get log file contents
        string logContents = "Lorem ipsum dolor sit amet " + DateTime.Now.ToString("hh:mm:ss");

        return new JsonResult { Data = logContents };
    }

如何正确完成?我稍微上网了,发现了on解决方案Refire ready event after AJAX reload和其他几个类似的链接,但我不确定如何在我的特定情况下实现它。谢谢!

4 个答案:

答案 0 :(得分:2)

我认为你应该在ajax调用的情况下使用函数pageload()

使用以下功能可能会对您有帮助,它会为我工作

  setInterval(function() {
        reloadLogBox();
    }, 5000);
function reloadLogBox() {
    $.ajax({
        url: '/json/AdminsStartUpdate/RefreshLogBox',
        type: "Post",
        success: function (response) {
            alert(response);
            $("#logTextArea").html = response;
        }
    });
}

这样的话请参考以下链接

http://encosia.com/document-ready-and-pageload-are-not-the-same/

答案 1 :(得分:0)

试试这个

$("#logTextArea").ready(function () {
    alert("ready!");
    setinterval(reloadLogBox(), 5000);
});

就绪功能总是被调用一次。文本框在第一次加载时准备就绪。它不会再次加载。你只是在改变它。所以准备好再次被召唤。因此,使用setinterval()方法定期调用函数,而不是超时。或者你可以在调用完成时在ajax调用中使用递归,你可以在ajax调用中再次调用settimeout,以便在一段时间后重复自身。

答案 2 :(得分:0)

加载HTML文档并准备好DOM时,

就绪事件只执行一次

详细了解this link

现在,你需要的就是这个。

    $(document).ready(
    function () {
        setInterval(function () {
            alert("refresh!");
        }, 500);
    });

$("#logTextArea").ready(function () {
            setInterval(function () {
                alert("ready!");
            }, 500);
        });

DEMO

答案 3 :(得分:0)

首先,您必须使用setInterval而不是setTimeout,因为您需要每隔几秒钟启动一次。请尝试以下代码;

$("#logTextArea").ready(function () {
    alert("ready!");
    setInterval(function () { reloadLogBox() }, 5000);
});

function reloadLogBox() {
    $.ajax({
        url: '/home/RefreshLogBox',
        type: "Post",
        success: function (response) {
            alert(response);
            $("#logTextArea").html(response);
        }
    });
}

$("#logTextArea").html = response;应为$("#logTextArea").html(response);。谢谢!