Laravel 5.6 .ajax发布请求未收到

时间:2018-02-11 15:21:09

标签: php ajax laravel-5

遵循一个简单的教程: 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,看看请求在哪里?

提前致谢。

3 个答案:

答案 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']); 
}

希望这有助于此帖的未来读者。谢谢:))