所以,我是ajax新手,我正在尝试使用ajax和jquery提交表单,我想我已经弄清楚了服务器端的逻辑,因为当我加载页面时,它会自动提交,页面会很快刷新。空白表单将进入数据库,尽管其中有很多表单,因为页面会不断提交每次刷新。所以我认为我的服务器端正在工作,但我不知道该怎么做,不仅要阻止它刷新,还要使用html表单中的提交按钮进行提交。我在html页面中使用了thymeleaf。
这是我的html表单,使用thymeleaf
<div id="newCommentForm">
<fieldset>
<div class="form-group">
<textarea rows="2" id="newComment" placeholder="comment" class ="form-control" style="width: 520px;"></textarea>
</div>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
<input type="submit" value="Comment" class="btn btn-info" />
</fieldset>
</div>
这是我的jquery和ajax
<script th:inline="javascript">
/*<![CDATA[*/
var postId = /*[[${post.id}]]*/'1';
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});
$(function() {
$.ajax({
url : "newComment",
type : "post",
data : {
"postId" : postId,
"newComment" : $("#newComment").val()
},
success : function(data) {
console.log(data);
location.reload();
},
error : function() {
console.log("There was an error");
}
});
});
/*]]>*/
提前谢谢。
更新
所以现在当我提交表单时,页面会刷新,url会做一些奇怪的事情,并显示csrf标记,并且没有数据提交到数据库中。这就是我提交时url的样子http://localhost:8080/viewCourse/post/1?_csrf=abefbd5b-392e-4c41-9d66-d66616fc4cc7,如果我去掉所做的更改并将其放回刷新循环中,如果我可以在表单中获取任何文本,则在页面刷新之前,它实际上会提交到数据库,因此我认为这意味着我有一个有效的url,因为它可以正常工作。我真的不知道是什么导致了这种情况,但表单似乎没有提交正确的信息,只有csrf令牌。这是我更新的jquery、ajax和html
jQuery//
var postId = /*[[${post.id}]]*/'1';
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});
$("#submit").click(function() {
$.ajax({
url : "newComment",
type : "post",
data : {
"postId" : postId,
"newComment" : $("#newComment").val()
},
success : function(data) {
console.log(data);
location.reload();
},
error : function() {
console.log("There was an error");
}
});
});
/*]]>*/
和我更新的html
<form>
<div class="form-group">
<textarea rows="2" id="newComment" placeholder="comment" class ="form-control" style="width: 520px;"></textarea>
</div>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
<input type="submit" value="Comment" id="submit" class="btn btn-info" />
</form>
</div>
使现代化
终于到了我的电脑:)
好吧,让我们检查原始代码的问题
/* $(function() {...}); is equivalent to $(document).ready();
* The code wrapped inside will be executed once the page is
* ready (loaded properly).
*/
$(function() {
// $.ajax() fires as soon as page is ready, causing it to be
// called "automatically"
$.ajax({
url : "newComment",
type : "post",
data : {
"postId" : postId,
"newComment" : $("#newComment").val()
},
success : function(data) {
// This is called as soon as the AJAX is completed...
console.log(data);
location.reload(); // ... and this refreshes the page, causing loop
},
error : function() {
console.log("There was an error");
}
});
});
我不确定你的超文本标记语言,但是如果提交
按钮在中
首先,您需要向submit按钮添加一个id(任何好的选择器都可以)。
<div id="newCommentForm">
<fieldset>
<div class="form-group">
<textarea rows="2" id="newComment" placeholder="comment" class ="form-control" style="width: 520px;"></textarea>
</div>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
<!-- ADD AN ID TO THIS BUTTON -->
<input type="submit" value="Comment" id="mySubmitButton" class="btn btn-info" />
</fieldset>
</div>
然后您需要更新代码以绑定到按钮的
单击
事件。
// 1. First is this $(document).ready() shorthand
$(function() {
// 2. Add a click handler to the button, it will be called when clicked
$('#mySubmitButton').on('click', function(e) {
// 3. Prevent default behavior of submit button
e.preventDefault();
// Prepare your variables
var postId = 0; // Post id?
// 4. Fire the ajax call
$.ajax({
url : "/MAKE/SURE/THIS/IS/A/VALID/URL",
type : "post",
data : {
"postId" : postId,
"newComment" : $("#newComment").val()
},
success : function(data) {
console.log(data);
//location.reload(); // Comment this out first to see if it works
},
error : function() {
console.log("There was an error");
}
});
});
});
我正在为Plunker找到模拟服务器响应的方法,稍后将再次更新。
原始的
您的代码将在ajax调用就绪后立即启动它。当页面准备就绪时,将执行包装在
$(function(){})中的代码,这就是自动触发ajax调用的原因。
此外,页面将在ajax调用完成时刷新($location.reload
中的成功
回调)。
要使用submit按钮提交表单,需要绑定到其click事件。
我现在正在打电话,稍后将用示例进行更新。
您正在构建jquery,使其在加载时运行。尝试将HTML更改为:
<div id="newCommentForm">
<fieldset>
<div class="form-group">
<textarea rows="2" id="newComment" placeholder="comment" class ="form-control" style="width: 520px;"></textarea>
</div>
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}" />
<input type="submit" id="submit" value="Comment" class="btn btn-info" />
</fieldset>
</div>
和JQuery到这个:
var postId = /*[[${post.id}]]*/'1';
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$(document).ajaxSend(function(e, xhr, options) {
xhr.setRequestHeader(header, token);
});
$("#submit").click(function(){
$.ajax({
url : "newComment", //assuming this is corrected to url
type : "post",
data : {
"postId" : postId,
"newComment" : $("#newComment").val()
},
success : function(data) {
console.log(data);
location.reload();
},
error : function() {
console.log("There was an error");
}
});
});
这将防止自动触发ajax,并使用按钮的id将其连接到提交按钮。
只需确保更正URL等内容,并确保在发送之前验证数据。这只是提供了默认情况下不触发的答案
问题内容: 我的表单类似于以下内容: 我是AJAX的新手,我要完成的工作是当用户单击“提交”按钮时,我希望脚本在后台运行而不刷新页面。 我尝试了类似下面的代码的方法,但是,它似乎仍然像以前一样提交表单,而不像我所需要的那样(在幕后): 如果可能的话,我想获得使用AJAX实施此功能的帮助, 提前谢谢了 问题答案: 您需要阻止默认操作(实际提交)。
问题内容: 我想提交表单而不刷新页面,从我阅读的内容来看,它应该可以与Ajax一起使用,我在做什么错? 当我这样做时,一切都与php和其他东西一起工作: 但是我希望它提交而不刷新页面。 HTML的一部分: JavaScript的一部分: 提前致谢。 编辑:可能已修复它在提交但没有发送提交 问题答案: 解决了它只是替换了: 用这个代替
假设有一个网页,它是显示现场比赛成绩或股票市场状况或货币兑换率。对于所有这些类型的页面,您需要定期刷新网页。 Java Servlet 提供了一个机制,使得网页会在给定的时间间隔自动刷新。 刷新网页的最简单的方式是使用响应对象的方法 setIntHeader()。以下是这种方法的定义: public void setIntHeader(String header, int headerValue
问题内容: 当按下发送按钮而字段中没有任何数据时,如何防止页面刷新? 验证设置工作正常,所有字段均变为红色,但随后页面立即刷新。我对JS的知识比较基础。 我特别认为底部的功能是“不良”。 的HTML JS 问题答案: 您可以阻止表单提交 当然,在该函数中,您可以检查是否有空白字段,如果看起来不正确,将停止提交。 没有jQuery:
问题内容: 有人可以告诉我使用 jquery来显示成功提交表单 而不刷新页面 的教程。传递邮件时,在gmail上会发生类似的事情,黄色的叠加层显示邮件已传递,然后淡出。 我希望根据表单提交的结果显示消息。 问题答案: 好的…类似这样的东西…但是我没有尝试过…所以像教程一样使用它。您也可以使用json js: HTML: form_process.php
问题内容: 当按下发送按钮而字段中没有任何数据时,如何防止页面刷新? 验证设置工作正常,所有字段均变为红色,但随后页面立即刷新。我对JS的知识比较基础。 我特别认为底部的功能是“不良”。 的HTML JS 问题答案: 您可以阻止表单提交 当然,在该函数中,您可以检查是否有空白字段,如果看起来不正确,将停止提交。 没有jQuery: