我想实现该图像中显示的功能。用户将单击编辑按钮并激活页面中单个字段的表单。
使用Ajax,我将更新模型,并在成功后再次恢复显示。这里的问题是CSRF_TOKEN。用户更新第一个字段后,无论是哪个字段,第二个编辑都将返回错误500令牌不匹配消息。
我尝试了许多不同的方法,包括我在这里看到的最后一个方法:
$.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 <meta name="csrf-token" content="{{ csrf_token() }}">
中更新令牌的值,但是我没有关于如何做的想法,我真的很想保持此功能而不刷新页面。
也许从控制器返回新的CSRF,它返回结果并在ajax请求的成功阶段使用类似$( 'meta[name="csrf-token"]' ).val( response.csrf );
的东西?
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}
});