代码之家  ›  专栏  ›  技术社区  ›  hjjr78

如果使用Ajax更新单个元素,但在响应文本中返回整个html代码,会发生什么情况?

  •  0
  • hjjr78  · 技术社区  · 2 年前

    我正在一个网站上工作,并使用Ajax按id名称(“mbody”)更新正文。该网站按预期运行,但后来我意识到,我在responseText中返回了整个页面数据,并用此响应更新了“mbody”。

    请记住,responseText确实为body包含了自己的“mbody”id名称。

    我不明白的是,为什么网站没有搞砸?我将整个页面的副本粘贴在DOM中已经存在的页面副本中。此后,我将Ajax更新从“mbody”更改为“mbody”。innerHTML,以更新HTML标记,因为我要返回整个页面。

    如果你想知道是否有必要返回整个页面,答案是肯定的,因为页面上的内容从上到下、从屏幕到屏幕都在变化,所以我更喜欢返回整个HTML。

    那么,Ajax是否意识到我在responseText中有一个“mbody”,并自动用当前的DOM“mbody”更新该部分,或者它真的在DOM中已经存在的“mbody”中放置了一个新的html页面源?

    我只是想了解Ajax在这种情况下的行为。同样,我的网站是完美的,即使我只返回身体部分的整个html源代码。

    // the response is returning an html page, while mbody is the current 
       //DOM body tag's ID
    mbody.innerHTML = this.responseText;
    
    //i later set the response to update the entire html; pseudo example
    htmltag.innerHTML = this.responseText;
    

    无论哪种方式,网站的功能都是完美的,但在当前的正文中粘贴一个完整的页面更新,我只是不明白这怎么会不会导致问题或破坏布局或其他东西。

    1 回复  |  直到 2 年前
        1
  •  1
  •   esqew    2 年前

    我正在开发一个网站,并使用Ajax按id名称更新正文 ('mbody')。网站按预期运行,但后来我意识到 正在responseText中返回整个页面数据并更新 “mbody”的回答。

    如果服务器端代码只返回要更新的值,那么以后调试会更容易(也会减少网络流量)。使用JSON也可以减少麻烦,因为它有自己的格式,Javascript可以轻松访问它,而无需对格式协议进行任何额外的工作。

    就本部分而言:

    如果您想知道是否有必要返回整个页面, 答案是肯定的,因为页面上的内容从顶部到 底部,从一个屏幕到另一个屏幕,所以我更喜欢只返回整个HTML。

    您可以在ajax调用之前保存页面的“滚动y位置”,然后在重新渲染之后恢复该滚动y。但是,如果您只是简单地更改dom中需要更改的部分,而不是所有部分,则无需执行任何操作。