VerifyCsrfToken.php第53行中的TokenMismatchException

时间:2017-03-01 08:09:49

标签: ajax laravel-5.1

我做了一个页面视图/ maessage.php
      https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js">       

  <script>
     function getMessage(){
        $.ajax({
           type:'POST',
           url:'/getmsg',
           data:{'_token': '{{ csrf_token() }}'},
           success:function(data){
              $("#msg").html(data.msg);
           }
        });
     }
  </script>   
  <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>
在routes.php中

Route::get('/ajax',function(){
  return view('message');
});

路线::交(&#39; /的getMsg&#39;,&#39; AjaxController @指数&#39);

AjaxController.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);
   }
}

当我跑http://localhost:8000/ajaxhttp://localhost:8000/getmsg生成以下错误

糟糕,看起来出了问题。

  

RouteCollection.php第218行中的1/1 MethodNotAllowedHttpException:in   RouteCollection.php第218行和错误的错误......

但是当我在consol中看到它显示以下错误

  

VerifyCsrfToken.php第53行中的TokenMismatchException:in   VerifyCsrfToken.php第53行

我无法理解错误。我更喜欢laravel。我实际上并不知道message.php中&#39; _token&#39;:'{{ csrf_token() }}'的含义。请。帮助解决这个错误。

1 个答案:

答案 0 :(得分:0)

此例外:

  

MethodNotAllowedHttpException

告诉您表单上的方法与路线上的方法不同。

因此,您有2个选项可以解决此问题。

第一个选项:更改路线方式类型 您的路线有GET

Route::get('/ajax',function(){
  return view('message');
});

但您的表单有一个POST

所以将其改为:

Route::post('/ajax',function(){
  return view('message');
});

第二个选项:更改您的ajax表单方法类型

Route::get('/ajax',function(){
  return view('message');
});


  <script>
     function getMessage(){
        $.ajax({
           type:'GET',
           url:'/getmsg',
           data:{'_token': '{{ csrf_token() }}'},
           success:function(data){
              $("#msg").html(data.msg);
           }
        });
     }
  </script> 

关于您关于CSRF的问题。它可以防止跨站点伪造。您可以在此处阅读:https://laravel.com/docs/5.4/csrf