您好我是Laravel的新手,我正在尝试使用ajax调用将一些数据传递给控制器。
路线
Route::post('/category', 'FrontendController@category');
控制器
public function category(Request $request){
$data = $request->all();
}
调用Ajax
var name= 'John';
$.ajax({
method: 'post',
url: '{{url("/category")}}',
data: {'name' : name},
success: function(response){
console.log(response);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(JSON.stringify(jqXHR));
console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
}
});
使用上面的代码我gef跟随错误:
RouteCollection.php第218行中的MethodNotAllowedHttpException
答案 0 :(得分:1)
只需将method: 'post'
替换为type: 'post'
,它就会开始工作
并且为每个ajax请求添加csrf标记,请遵循此Laravel CSRF Token
在head
部分
<meta name="csrf-token" content="{{ csrf_token() }}">
然后在您的javascript部分添加此内容
<script>
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
</script>
答案 1 :(得分:0)
试试这个:
步骤1:在Controller
的构造函数中创建BASE_URL
public function __construct() {
if (!defined('BASE_URL')) define('BASE_URL', url('/') . '/');
}
第2步:定义路线
Route::post('category', 'CategoryController@postCategory');
第3步:添加&#34; BASE_URL&#34;到HTML并在Script中实现。
<script>
var APP = APP || {};
APP.baseUrl = "{{ BASE_URL }}";
window.Laravel = <?php echo json_encode([
'csrfToken' => csrf_token(),
]); ?>
</script>
然后,
$(function(){
var loadMoreRequest = null;
$('#formSubmit').on('click', function(){
if (loadMoreRequest !== null) {
return;
}
loadMoreRequest = $.ajax({
url: APP.baseUrl + '/category',
data: {'_token': window.Laravel.csrfToken},
type: 'POST',
asyn: false,
success: function (data) {
console.log('Yay!')
loadMoreRequest = null;
},
error: function() {
loadMoreRequest = null;
}
});
});
});
看,如果有帮助。