Laravel 5中没有Ajax响应

时间:2016-10-07 07:47:31

标签: php jquery ajax laravel

我正在尝试使用Laravel 5获得Ajax响应,但它不会工作。这是我在Chrome调试器中看到的错误:

POST http://localhost:8000/getmsg 500 (Internal Server Error)send @ jquery.min.js:4ajax @ jquery.min.js:4getMessage @ ajax:10onclick @ ajax:25

这是resources / views中的message.php:

<html>
   <head>
      <title>Ajax Example</title>

      <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>
   </head>

   <body>
      <div id = 'msg'>This message will be replaced using Ajax. 
         Click the button to replace the message.</div>
      <?php
         echo Form::button('Replace Message',['onClick'=>'getMessage()']);
      ?>
   </body>

</html>

这是我的Ajaxcontroller.php:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class AjaxController extends Controller {
   public function index(){
      $msg = "This is a simple message.";
      return response()->json(array('msg'=> $msg), 200);


}
}

然后我将其添加到路径中的web.php:

Route::get('ajax',function(){
   return view('message');
});
Route::post('/getmsg','AjaxController@index');

4 个答案:

答案 0 :(得分:1)

将此ajax代码中的网址更改为正确的路径(例如// public / getmsg)

<script>
         function getMessage(){
            $.ajax({
               type:'POST',
               url:'/<project_name/public/getmsg',
               data:'_token = <?php echo csrf_token() ?>',
               success:function(data){
                  $("#msg").html(data.msg);
               }
            });
         }
      </script>

答案 1 :(得分:1)

您可以为所有通话设置一次CSRF令牌:

<script>
    const xCsrfToken = "{{ csrf_token() }}";
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': xCsrfToken
        }
    });
</script>

你可以在你的动作中返回数组,它会自动转换为json:

public function index(){
      $msg = "This is a simple message.";
      return ['msg'=> $msg];
}

答案 2 :(得分:0)

如果你的网址在htttp://hostname/getmsg

,则更改ajax调用
<script>
         function getMessage(){
            $.ajax({
               type:'POST',
               url:'<?php echo url('/') ?>/getmsg',
               data:'_token = <?php echo csrf_token() ?>',
               success:function(data){
                  $("#msg").html(data.msg);
               }
            });
         }
      </script>

答案 3 :(得分:0)

我是通过将ajax类型设置为GET来实现的:

 <script>
        function getMessage(){
            $.ajax({
                type:'GET',
                url:'/getmsg',
                data:'_token = <?php echo csrf_token() ?>',
                success:function(data){


$("#msg").html(data.msg);

            }
        });
    }
</script>

并且路线设置为获取而不是发布:

Route::get('/getmsg','AjaxController@index');

这有效,但我完全不知道为什么POST方法根本没有。我认为合适的解决办法是知道为什么POST不起作用所以请尽管这个也有效,如果有人知道怎么用POST就知道了。