javascript - 为什么重新加载在ajax中不可见,但在控制台中可见?

标签 javascript php jquery html ajax

所以,我有一个相当旧的项目,当我比现在经验少得多时(因此该方法一定非常糟糕),现在我制作了一个相当旧的项目,现在查看我的旧代码,我对背后的机制产生了一些疑问。

我有index.phpinput.php ,当我在 index.php 上的表单上按“提交”时表单中的数据发送至input.php然后数据经过验证,放入MySQL数据库。如果此时一切正常,服务器将返回响应:

<script>location.reload();</script>

以下是我发送该请求的方式:

$.ajax({
    url: $("#input_form").attr("action"),
    data: formData,
    processData: false,
    contentType: false,
    type: 'POST',
    success: function(info){$("body").html(info);}
});

所以,基本上,如果一切正常,页面将被强制重新加载。成功了,我们可以在页面上看到新的数据。

问题是:

1) 为什么页面重新加载实际上是不可见的?背后有什么机制?据我将整个正文的 html 更改为带有重新加载功能的脚本标记,因此它应该类似于(如果不相同)将 $('body').html("<script>location.reload()</script>")在浏览器控制台中,差异非常明显 - 如果我将其放在浏览器控制台中,然后刷新按钮发生变化,当前事件浏览器选项卡的图标也会更改为重新加载图标,而请求不会发生这种情况

2) 为什么 Chrome 开发工具将重新加载视为来自 input.php 的重定向(网络选项卡)并将整个 html index.php 生成作为响应,如果我运行 $('body').html("<script>location.reload()</script>") 则不会发生这种情况在控制台中?

最佳答案

我认为我们可以同意 location.reload();只需重新加载整个页面即可。它也可能是一个完全不同的页面。

$("body").html(info);替换 <body> ... </body> 的内容完整的页面元素,但这不是整个页面。 HTML 页面更多。它有标题,一个 <head> 、脚本等等。当您使用 $("body").html(info); 时,这一切都保持不变。

JQuery documentation.html()使用浏览器的 innerHTML属性(property)。具体机制是:

  1. 指定的值被解析为 HTML,生成 DocumentFragment object代表新元素的新 DOM 节点集。
  2. 元素的内容将替换为新 DocumentFragment 中的节点。由于所有节点都会同时插入到文档中,因此仅触发一次回流和渲染,而不是单独插入时为每个插入的节点触发一次回流和渲染。

页面reload()完全重建文档,包括所有内容。它构建了一个 DOM 注释树,并在尝试渲染它的同时。在构建整个页面时,可能会触发多次回流和渲染。例如,当加载 CSS 文件时,或者当进入更多 HTML 源时。许多页面还包含 Javascript,它们会在加载后稍微修改页面。这就是您在完全重新加载完成后看到的内容。

关于javascript - 为什么重新加载在ajax中不可见,但在控制台中可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55985446/

相关文章:

javascript - Extjs 4.2.2 Ext.Window.Show 不显示商店中加载的数据

php - 更新数据库时缺少参数错误

Jquery 使用 $.map 映射 json 数组

javascript - 如何防止滑动的 div 取代其他元素?

javascript - Angularjs更新范围变量而不重复

javascript - 从左下到右上绘制复选标记CSS动画

javascript - 使用当前状态序列化和反序列化表单

PHP删除之前的循环数据

php - 如何使用 zend 框架创建站点地图?

php - 限制标签中的字数