JavaScript - thymeleaf 在 js 中渲染的一个问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript - thymeleaf 在 js 中渲染的一个问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2214字,纯文字阅读大概需要4分钟。
内容图文
可能只是一个小小的问题。。。虽然解决了。但真的有点吐了。
嘛,可能标题取叫 「spring boot ajax 发送 post 方法报 500 状态码,put 方法报405 状态码错误」 更能让遇到相同问题的伙伴很快找到解决办法。
这个问题是我在用 java + springboot + security + thymeleaf + jquery 写网站时遇到的。
先说说的要做的事:在前一个页面点击新建按钮会来到编辑页面,如果点击编辑按钮就将数据加载并进到编辑页面,所以如果是新建,那么保存的时候就发送 post 请求,反之则是 put,这部分完全仅使用 REST 风格的方式来提交数据即可,所以在这里使用了 ajax。
问题,考虑下面 ajax 代码:
$(document).ready(function() { $("#submit").on("click", function() { var url = /*[[${archive} == null ? ‘/api/archive‘ : ‘/api/archive/‘ + ${archive.id}]]*/ null; var method = /*[[${archive} == null ? ‘POST‘ : ‘PUT‘]]*/ null; var type = /*[[${archive} == null ? ‘add‘ : ‘update‘]]*/ null; var token = $("meta[name=‘_csrf‘]").attr("content"); var header = $("meta[name=‘_csrf_header‘]").attr("content"); var title = $("#title").val(); var content = $("#content").val(); var postData = JSON.stringify({type: type, title: title, content: content}); $.ajax({ type: method, url: url, contentType: "application/json", beforeSend: function(xhr) { xhr.setRequestHeader(header, token); }, data: postData, dataType: ‘json‘, success: function(data) { console.log(data); window.location.href = ‘/manager‘; }, failure: function(errMsg) { alert(errMsg); } }); }); });
几乎没觉得有什么问题对吧。
但如上所说,spring 就是会报错,并且我从一开始就十分确定自己的 controller 部分绝对没问题,所以知道问题就在这段 js 中。
解决办法仅仅就是把 thymeleaf 内联的变量那几句放到 $("#submit").on(...) 的外面就可以了:
$(document).ready(function() { var url = /*[[${archive} == null ? ‘/api/archive‘ : ‘/api/archive/‘ + ${archive.id}]]*/ null; var method = /*[[${archive} == null ? ‘POST‘ : ‘PUT‘]]*/ null; var type = /*[[${archive} == null ? ‘add‘ : ‘update‘]]*/ null; $("#submit").on("click", function() { //... }); });
但就这个小问题,我吐槽一下。
做了几次实验,在 ("#submit").on 里面, ajax 发送前使用固定 url 和 methon 字符串后,都不会有任何问题。但只要把 thymeleaf 语法的变量写在 ("#submit").on(...) 里面,就会发现 console.log(url) 没显示东西,仅换行,然后就直接 500 报错。于是,显然经过 thymeleaf 渲染的变量在 on("click", function 这句下有问题,而页面上看是完全没问题的。。。当然,我虽然对 js 完全不熟悉,但我觉得很可能是 js 是即时编译(JIT)的执行机制上的问题。因为可能这部分的运行逻辑是:thymeleaf 解析好 html, 浏览器加载 html,开始解析 html,然后加载 js,这些都过程没有问题,所以浏览器页面看到的就没什么毛病,但由于点击后还会再次执行 js,于是 $("#submit") 这段重新编译、解析,然后导致了url 为 null?(但为啥 type 和 method 不为 null ?报错的页面看 postData 的时候是正确的)。
原文:https://www.cnblogs.com/darkchii/p/12578989.html
内容总结
以上是互联网集市为您收集整理的JavaScript - thymeleaf 在 js 中渲染的一个问题全部内容,希望文章能够帮你解决JavaScript - thymeleaf 在 js 中渲染的一个问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。