什么时候应该加载 Ajax 代码?

Posted

技术标签:

【中文标题】什么时候应该加载 Ajax 代码?【英文标题】:When should the Ajax code be loaded? 【发布时间】:2016-06-23 02:44:54 【问题描述】:

我在我的网站上使用 Ajax 来提交表单,而无需重新加载当前页面。我把代码和我所有的 javascript: 放在 </body> 标记之前。

但是我注意到,当我在加载结束之前加载页面并提交表单时,页面会重新加载,就像 Ajax 不存在一样。

这就是我的代码现在的样子:

<html>
    <head></head>
    <body>
        <form id="ajaxForm"></form>
        <script type="text/javascript">
            $("#ajaxForm").on("submit", function(e)
                $.ajax();
            );
        </script>
    </body>
</html>

我认为下面的代码可以做我所做的,但是我想使用选择器(例如#ajaxForm)作为触发元素来执行Ajax。

<html>
    <head>
        <script type="text/javascript">
            function submitForm()
                $.ajax();
            
        </script>
    </head>
    <body>
        <form id="ajaxForm" onsubmit="submitForm()"></form>            
    </body>
</html>

我应该如何安排我的代码以正确使用 Ajax,即使页面加载尚未完成?

【问题讨论】:

第一个很好(就在&lt;/body&gt; 标记之前),如果表单位于脚本之前,您应该没有任何问题。您可以尝试将整个内容包装在文档就绪函数$(function() /* code here */); 中。编辑:您可以尝试设置 onsubmit 为表单返回 false 以防止默认提交... 页面加载完成前用户如何提交表单? 当表单提交按钮被加载时,我可以点击它,因此如果不采取任何措施来阻止它,表单将被提交。 【参考方案1】:

我认为你需要防止表单提交的默认操作。

您可以通过将e.preventDefault(); 添加到您的第一个脚本中来实现此目的:

$("#ajaxForm").on("submit", function(e)
    e.preventDefault();
    $.ajax();
);

【讨论】:

不幸的是,当这个脚本放在正文的末尾时,它也是在 HTML 之后加载的。当页面加载时会发生什么(当加载 HTML 的上部,而不是包含脚本的下部)并且我单击提交表单按钮时,表单仍然会正常提交。 onsubmit="返回假;"将阻止在加载表单的 HTML 时立即提交。【参考方案2】:

我按照马克的建议做了:

 <html>
    <head></head>
    <body>
        <form id="ajaxForm" onsubmit="return false;"></form>
        <script type="text/javascript">
            $("#ajaxForm").on("submit", function(e)
                e.preventDefault();
                $.ajax();
            );
        </script>
    </body>
 </html>

" onsubmit="return false;" " 将阻止随时经典提交。这就是我所需要的。 “ e.preventDefault();” 单独是不够的,尤其是在正文末尾加载时。

【讨论】:

以上是关于什么时候应该加载 Ajax 代码?的主要内容,如果未能解决你的问题,请参考以下文章

ajax同步异步问题

带有ajax数组的JQuery $.when [重复]

Ajax同步与异步优缺点与适用情况。

jquery的ajax同步和异步

ajax请求返回的数据无法用选择器绑定事件

jquery的同步和异步