
表单提交默认会刷新整个页面,无法直接将响应内容载入指定 div;需改用 fetch api 异步请求并手动更新 dom,或使用 iframe 配合 form target 属性实现局部加载。
表单提交默认会刷新整个页面,无法直接将响应内容载入指定 div;需改用 fetch api 异步请求并手动更新 dom,或使用 iframe 配合 form target 属性实现局部加载。
传统 ✅ 推荐方案:使用 ⚠️ 注意事项: ? 替代方案:iframe(兼容性极佳,但语义弱、样式隔离强) 总结:优先选用 fetch 方案——它精准控制加载目标、支持错误处理、便于调试,并符合现代 Web 开发最佳实践。<form submit></form> 行为本质上是导航操作,浏览器会将响应渲染为全新的浏览上下文(如新页面、新标签页或 iframe),而不能直接注入到普通 <div> 中——因为 <code><div> 不是可导航的容器。你当前代码中设置 <code>action="inc_tessera.php#divTessera" 并调用 submit(),仅影响 URL 锚点,对实际加载位置无任何作用。fetch + innerHTML 动态更新(现代、灵活、无需 iframe)
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script><script>
jQuery($ => {
$('.e-chiedi').on('click', async e => {
const $btn = $(e.target);
const confirmed = await $.MessageBox({
buttonDone: "Si",
buttonFail: "No",
message: "Mymessage"
}).promise(); // 注意:需确保 MessageBox 支持 promise(如基于 Promise 封装)
if (confirmed) {
try {
// 使用 fetch 发起 POST 请求(模拟表单提交)
const formData = new FormData($('#formHome')[0]);
const response = await fetch('inc_tessera.php', {
method: 'POST',
body: formData
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const html = await response.text();
$('#divTessera')
.show() // 显示隐藏的 div
.html(html); // 插入服务器返回的 HTML 内容
} catch (err) {
console.error('加载失败:', err);
alert('内容加载失败,请重试');
}
}
});
});
</script>
inc_tessera.php 返回的是纯 HTML 片段(非完整 HTML 文档),否则可能破坏页面结构;FormData 可自动处理;若需 JSON 交互,后端应返回 JSON 并由前端渲染;$.MessageBox 若不原生支持 Promise(如旧版插件),需手动包装为 Promise,或改用原生 confirm() 过渡;text/html; charset=utf-8),避免乱码。
将 <div id="divTessera"> 替换为 <code><iframe id="divTessera" name="tesseraFrame" style="width:100%;height:400px;border:none;"></iframe>,并在 <form></form> 中添加 target="tesseraFrame" 即可。此时 submit() 会将响应载入该 iframe —— 但无法通过 JS 直接读取 iframe 内容(跨域限制),且 SEO 和可访问性较差,仅建议遗留系统使用。










