Javascript js在基于laravel的引导程序上发送表单时出错
我想完成这个简单的任务:Javascript js在基于laravel的引导程序上发送表单时出错,javascript,laravel,bootstrap-modal,csrf-token,Javascript,Laravel,Bootstrap Modal,Csrf Token,我想完成这个简单的任务: <form id="myForm" action="foo.htm" method="post"> <ul> <li onclick="myForm.submit();">Click me</li> </ul> </form> 单击我 我的页面有点复杂,但并不难:我通过点击呈现页面上的按钮加载了一个模式,并根据一个变量的内容动态绘制,因此在我的脚本部分: $.each(
<form id="myForm" action="foo.htm" method="post">
<ul>
<li onclick="myForm.submit();">Click me</li>
</ul>
</form>
单击我
我的页面有点复杂,但并不难:我通过点击呈现页面上的按钮加载了一个模式,并根据一个变量的内容动态绘制,因此在我的脚本部分:
$.each(tasks, function(index, task) {
[...]
VARIABLE DECLARATION PART
[...]
body.append('<form class=taskForm id='+taskId+' action="'+
'{{URL::route('dettaglioTask')}}"' +
' method="Post">' +
'@csrf'+
'<li onClick="'+taskId+'.submit()">' +
'<div class="block">' +
'<div class="tags">' +
'<a class="tag">' +
'<span>'+da+'-'+mo+'-'+ye+'</span>' +
'</a>' +
'</div>' +
'<div class="block_content">' +
'<h2 class="title">' +
'<a>'+divStatus+'</a>' +
'</h2>' +
'<div class="byline">' +
'<span>'+tipo+'</span> ' +
'</div>' +
'<p class="excerpt">'+descrizione+'' +
'</p>' +
'</div>' +
'</div>' +
'</li>'+
'</form>'
);
$。每个(任务、函数(索引、任务){
[...]
变量声明部分
[...]
body.append(“”)+
“@csrf”+
“”+
'' +
'' +
'' +
“+da+”-“+mo+”-“+ye+”+
'' +
'' +
'' +
'' +
“+divStatus+”+
'' +
'' +
''+tipo+''+
'' +
“”+描述+
“
”+
'' +
'' +
“ ”+
''
);
此部分在引导模式中正确呈现给我。
有趣的是:
<ul class="list-unstyled timeline">
<form class="taskForm" id="1135102" action="http://localhost:8000/dettaglioTask" method="Post">
<input type="hidden" name="_token" value="VJQYeeHRWs222Rms1UBWxdvc7tPcBGer7xMy6iUC">
<li onclick="1135102.submit()">
[....]
</li>
-
[....]
甚至下一个forms/li元素对我来说都是正确的,具有唯一的id、令牌、url和变量。
所以我为什么得到这个:
未捕获的语法错误:无效或意外标记
当我尝试点击特定的“li”元素时
第二个问题是,我是否需要在所描述的每种形式中嵌入“csfr”令牌?
因为我在手册上找到了这一点,但我不太清楚什么是正确的方法:
CSRF令牌和JavaScript
在构建JavaScript驱动的应用程序时,让JavaScript HTTP库自动将CSRF令牌附加到每个传出请求是很方便的。默认情况下,resources/js/bootstrap.js文件中提供的Axios HTTP库会使用加密的XSRF-token cookie值自动发送X-XSRF-token头如果不使用此库,则需要为应用程序手动配置此行为
我在Laravel6.2上使用bootstrap.min.js。
谢谢!如果您只想通过表单名称调用
submit
函数,您需要为表单指定一个名称,而不是id
属性。
因此,如果你有
你可以做myForm.submit()
,如果你有
你需要做getElementById('myForm')。submit()
此外,是的,如果您以这种方式发送表单,则需要添加CSRF令牌。如果您使用像axios这样的HTTP客户端,则可以为每个请求自动设置CSRF令牌。但是,您必须以不同的方式发送表单,即使用axios
编辑:
发送表单无论哪种方式都有效,因此它与您是否使用id
或name
无关。我从中获得了信息,但得出了错误的结论。我假设表单没有发送,但这不是问题所在。经过多次测试后,我发现问题是“id”字段中出现了错误:
-我的任务ID是数字的
因此,表单的所有id或名称都是数字
一个id的值“example”而不是一个数字是错误的,这个id用于发送表单!
因此,我所做的是在表单的id/name上添加一小部分,在onclick函数上添加同样的内容。
我可以确认它在id或名称上起作用
'<form class=taskForm name=numero_'+taskId+' action="'+
'{{URL::route('dettaglioTask')}}"' +
' method="Post">' +
'@csrf'+
'<li onClick="numero_'+taskId+'.submit()">' +
“”+
“@csrf”+
“”+
所以这个回复是错误的,即使它被标记为解决方案更改完成,但对我来说是相同的错误:“Uncaught SyntaxError:Invalid or unexpected token”看,通常你不会否决一个答案,即使它不能解决你的问题。看这里:我以为问题是表单没有发送。所以我查了一下,发现了这个问题,然后认为问题是设置ID而不是名称。现在很明显,问题不是表单没有发送,而是服务器端错误。请告诉我r否决票,但这并不是说你所说的是错的,它的工作甚至是通过id,所以对于这一点,我否决票。如果我也错了…道歉。无论如何感谢你的贡献。我只是想让你知道。否决票并不意味着在答案错误时使用。如果你这样做,你就失去了人们对你的帮助。而且,你也失去了自己的声誉关于CSRF的部分仍然是正确的,所以我认为“没有用”是有争议的。