首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个jQuery/Ajax函数有什么问题?

这个jQuery/Ajax函数有什么问题?
EN

Stack Overflow用户
提问于 2011-03-18 05:31:56
回答 3查看 114关注 0票数 0

我有一个在线聊天室,它使用jQuery/Ajax从服务器请求数据。然而,我使用的方法效率非常低,我试图通过仅在聊天内容发生更改(新消息等)时加载服务器数据来改进它。该方法似乎在逻辑上是正确的,尽管不知何故它从不计算为true。我已经附上了下面的代码,请告诉我我做错了什么,因为这给了我一个非常艰难的时间。我希望仅当来自服务器的数据不同时才更改聊天div。

代码语言:javascript
复制
function loadMsgs()
{
var v_loadMsgs = new XMLHttpRequest();

v_loadMsgs.open("GET", "msgs.php");

v_loadMsgs.onreadystatechange = function()
{
    var old_content = $("#msgs").html();
    var new_content = v_loadMsgs.responseText;

    if (old_content != new_content) 
    {
        $("#msgs").html(new_content);
    }

    if (old_content == new_content) 
    {
        $("#msgs").html("EQUAL!"); // only here for testing
    }
};

v_loadMsgs.send(null);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-18 05:36:32

我只使用jQuery的AJAX函数。它们让一切变得非常简单:

代码语言:javascript
复制
function loadMsgs()
{
    jQuery.get("msgs.php", function(data)
    {
        if ($("#msgs").html() != data) 
        {
            $("#msgs").html(data);
        } else {
            $("#msgs").html("EQUAL!"); // only here for testing
        }
    });
}

如果你真的想知道你的方法不工作的原因,你不需要检查服务器是否真的向你发送了一个响应(返回一个4readyState ):

代码语言:javascript
复制
function loadMsgs()
{
var v_loadMsgs = new XMLHttpRequest();

v_loadMsgs.open("GET", "msgs.php");

v_loadMsgs.onreadystatechange = function()
{
    if (v_loadMsgs.readyState == 4)
    {
        var old_content = $("#msgs").html();
        var new_content = v_loadMsgs.responseText;

        if (old_content != new_content) 
        {
            $("#msgs").html(new_content);
        }

        if (old_content == new_content) 
        {
            $("#msgs").html("EQUAL!"); // only here for testing
        }
    }
};

v_loadMsgs.send(null);
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-18 05:36:12

当您执行.html()时,浏览器会给出格式整齐的HTML。也就是说,所有的标签都是封闭的,所有的属性都用引号括起来,诸如此类。而且您从msgs.php返回的内容很可能没有完全格式化。因此,这就是区别所在。

然而,如果你担心效率低下,这种方法仍然是非常低效的。我的意思是,是的,您不再不必要地更新UI,但是您仍然从服务器加载消息列表,不是吗?

为了在这里节省几个字节,您应该使用"if-modified“技术。也就是说,与消息列表一起返回某种类型的时间戳。比方说,就是一个整数。当服务器上发生变化时,将该整数加1。当从服务器请求更新时,让AJAX代码传递之前接收到的时间戳,如果时间戳是当前的,则让服务器响应"nothing changed“。否则,让服务器传输新的消息列表。粗略地说,这就是我们的想法。

票数 3
EN

Stack Overflow用户

发布于 2011-03-18 05:33:36

尝试使用jquery's ajax functions

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5345517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档