Jquery Ajax表单没有提交,url显示csrf令牌

时间:2015-11-21 23:49:24

标签: jquery ajax csrf thymeleaf

我是Ajax的新手,我尝试使用jquery,ajax和thymeleaf为视图提交表单。我知道post url有效,因为如果我只是告诉ajax提交,一旦页面加载表单中的任何内容提交到数据库没有问题,但如果我尝试使用提交按钮,那么表单变为空白,并且网址更改为此类http://localhost:8080/viewCourse/post/1?_csrf=d512fb5c-08e5-4373-895e-1297b0c35a4b,并且没有任何内容进入数据库,但控制台中也没有错误,所以我不确定是什么发生。

这是我的jquery和ajax

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

<div id="newCommentForm">
    <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>

如果有人能够看到我做错了什么并让我知道这会很棒,请提前感谢。

2 个答案:

答案 0 :(得分:2)

首先,你必须在$(document).ready(function(){});中声明你的点击监听器,否则这部分代码会在你的DOM元素存在之前运行,因此它们不会调用你的点击功能。

修复此问题后,您会看到表单将执行默认操作(就像您现在遇到的一样)。为此,您必须阻止提交按钮的默认操作:

$(document).ready(function(){
    $("#submit").on("click", function(ev) {
        ev.preventDefault();

        ...

    });
});

我个人更喜欢on("click", ...),但你的方式也会有用。 希望它有所帮助。

答案 1 :(得分:1)

表单是否为空白或页面是否为空白?

您没有阻止HTML表单提交,因此正在提交表单,这就是值在URL中的原因。

尝试:

$("#submit").click(function(e) {

    e.preventDefault()

    // ajax code here

});