遵循一个简单的教程: https://www.tutorialspoint.com/laravel/laravel_ajax.htm。 (该教程是在早期版本的Laravel上完成的,因为它指的是app \ http \ routes.php。)
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">
</script>
<script>
function getMessage(){
$.ajax({
type:'POST',
url:'/getmsg',
data:'_token = <?php echo csrf_token() ?>',
success:function(data){
$("#msg").html(data.msg);
}
});
}
</script>
我的web.php中的功能未被触发。单击按钮,没有任何反应。 调试页面上的.ajax调用,触发.ajax。
在我的web.php中放置一个断点,但未点击:
Route::get('ajax',function(){
return view('ajax');
});
Route::post('/getmsg',function(){
$msg = "This is a simple message.";
return response()->json(array('msg'=> $msg), 200);
});
检查了laravel.log,没有任何内容。
邮寄请求有问题吗? 无论如何都要跟踪Laravel,看看请求在哪里?
提前致谢。
答案 0 :(得分:1)
所有API
来电都在api.php
档内,而不是web.php
。话虽如此,您需要将路线从web.php
移至api.php
答案 1 :(得分:0)
在你的javascript中试试这个
function getMessage() {
$.ajax({
url: "/getmsg",
type: "POST",
beforeSend: function(xhr) {
var token = $('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
success: function(data) {
$("#msg").html(data.msg);
alert(data.msg);
},
error: function(data) {
alert("Error!!!!");
}
});
}
答案 2 :(得分:0)
关于@Nikola Gavric的回答,如果您使用控制器构造函数来调用中间件方法。像这样:
public function __construct()
{
$this->middleware('auth');
}
然后,在将您的路线从web.php
重新定位到api.php
后,您需要告诉Laravel您的路线使用两个警卫。一个用于web.php
中的路由,另一个用于api.php
中的路由。为此,请将上面的代码更改为:
public function __construct()
{
$this->middleware(['auth:web' || 'auth:api']);
}
希望这有助于此帖的未来读者。谢谢:))