gpt4 book ai didi

javascript - 提交两次时 Ajax 不工作

转载 作者:行者123 更新时间:2023-12-03 12:17:46 25 4
gpt4 key购买 nike

您好,感谢您的阅读!

首先,这是我的设置:

  • index.php - 使用以下方式将内容加载到 div 中

    jq('#p5-content').load('content/stuff.php');
  • stuff.php - 在其 <head> 中包含一个表单和一个脚本部分。

这是脚本:

var jq = $.noConflict();
jq(function () {

jq('form').on('submit', function (e) {

e.preventDefault();

var page = jq(this).attr("page");

jq.ajax({
type: jq(this).attr("method"),
url: jq(this).attr("action"),
data: jq(this).serialize(),
success: function (data) {
jq('#' + page + '-content').html(data);
}
});

});

});

这是表格:

<form action="content/stuff.php" method="post" page="p5">
<input type="hidden" name="p5-submit-1" />
<input type="image" style="margin-top: 20px;" src="images/send.png" />
</form>

我遇到的问题是,有时单击发送按钮时,整个页面会重定向到 content/stuff.php有时只有 div ( p5-content ) 中想要的内容响应表单。我只想要 p5-content 的内容被替换。

此外,当它起作用并且不同的内容被加载到p5-content时其中包含另一个(类似)表单,整个页面更改为 content/stuff.php单击第二个表单时。

此外,我想知道为什么如果脚本位于 <head> 中,它就不起作用。我的一部分index.php .

摘要:

  • 如果脚本位于index.php 中,则该脚本应该可以运行
  • 脚本应该始终有效,而不仅仅是有时(通常只有在重新加载页面后才有效)
  • 当在我的 ajax 的响应区域内提交第二个表单时,响应应该再次位于 div 内。

最佳答案

p5-content 元素位于您的层次结构中的哪个位置?如果<form>是 p5-content 的子元素,那么您的原始表单(您为其分配了提交处理程序)将被替换为新的、相同的 <form> ,它没有绑定(bind)任何提交处理程序。这可以解释为什么它发布整个页面,因为 e.preventDefault();不再接到电话。

要解决此问题,请找到一种不替换整个 <form> 的方法。通过你的ajax调用。无论如何,这更好,因为这意味着每次 ajax 回发时发送的数据更少。或者,如果您确实必须替换整个 <form> ,在ajax回调末尾重新添加提交事件处理程序。

至于为什么你的脚本在<head>中不起作用,这可能是因为你的脚本在包含 jQuery 之前运行(我不确定你在哪里包含 jQuery)。由于 HTML 解析器在等待脚本加载时会阻塞,因此您可能希望在 <body> 末尾加载所有脚本。无论如何,为了让您的内容加载更快。您还可以使用async属性如 this post 中所述,但这并不能保证您的脚本将以正确的顺序加载,因此我不会在您的情况下推荐它。或者,如果您确实关心优化加载时间并希望投入一些工作,请查看 this article .

关于javascript - 提交两次时 Ajax 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24597246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com