【发布时间】:2020-07-23 19:22:06
【问题描述】:
我想实现我在该图像中显示的功能。用户将单击编辑按钮并激活页面中单个字段的表单。
使用 Ajax 我将更新模型并在成功后再次恢复显示。这里的问题是 CSRF_TOKEN。用户更新第一个字段后,无论是哪个字段,第二次编辑都会返回错误 500 token mismatch 消息。
我尝试了许多不同的方法,包括我在这里看到的最后一种方法:
$.ajaxSetup( {
beforeSend: function( xhr, settings ){
function getCookie( name ){
var cookieValue = null;
if( document.cookie && document.cookie != '' ){
var cookies = document.cookie.split( ';' );
for( var i = 0; i < cookies.length; i++ ){
var cookie = jQuery.trim( cookies[ i ] );
// Does this cookie string begin with the name we want?
if( cookie.substring( 0, name.length + 1 ) == ( name + '=' ) ){
cookieValue = decodeURIComponent( cookie.substring( name.length + 1 ) );
break;
}
}
}
return cookieValue;
}
if( !( /^http:.*/.test( settings.url ) || /^https:.*/.test( settings.url ) ) ){
// Only send the token to relative URLs i.e. locally.
xhr.setRequestHeader( "X-CSRFToken", getCookie( 'csrftoken' ) );
}
}
} );
但我仍然在第二次提交时收到错误。我知道我需要做的就是在我的元 <meta name="csrf-token" content="{{ csrf_token() }}"> 中更新令牌的值,但我没有关于如何做到这一点的想法,我真的想在不刷新页面的情况下保留此功能。
也许从返回结果的控制器发送新的 CSRF 并在我的成功阶段在 ajax 请求中使用$( 'meta[name="csrf-token"]' ).val( response.csrf ); 之类的东西?
【问题讨论】:
-
出于某种原因,我可以毫无问题地提交任意数量的请求。
标签: jquery laravel ajaxform csrf-token