【问题标题】:how to send a ajax request using laravel5 on xampp如何在 xampp 上使用 laravel 发送 ajax 请求
【发布时间】:2015-02-26 06:41:08
【问题描述】:

routes.php

Route::get('/register',function(){
    $data = 'Register';
    return View::make('user.register');
});

Route::post('/register',function(){
    $inputData = Input::get('formData');
    parse_str($inputData, $formFields);  
    $userData = array(
      'name'      => $formFields['name'],
      'email'     =>  $formFields['email'],
      'password'  =>  $formFields['password'],
      'password_confirmation' =>  $formFields[ 'password_confirmation'],
    );
    $rules = array(
        'name'      =>  'required',
        'email'     =>  'required|email|unique:users',
        'password'  =>  'required|min:6|confirmed',
    );
    $validator = Validator::make($userData,$rules);
    if($validator->fails())
        return Response::json(array(
            'fail' => true,
            'errors' => $validator->getMessageBag()->toArray()
        ));
    else {
    //save password to show to user after registration
        $password = $userData['password'];
    //hash it now
        $userData['password'] =    Hash::make($userData['password']);
        unset($userData['password_confirmation']);
    //save to DB user details
      if(User::create($userData)) {  
          //return success  message
        return Response::json(array(
          'success' => true,
          'email' => $userData['email'],
          'password'    =>  $password
        ));
      }
  }
});

Register.blade.php

<html>
    <head>
        <link href='//fonts.googleapis.com/css?family=Lato:100' rel='stylesheet' type='text/css'>
<script src="./jquery.js"></script>


    </head>
    <body>
{!!Form::open(['url'=>'register'],array('id'=>'regForm'))!!}  
    {!! Form::label('name', 'Name', array('class'=>'control-label')) !!}
    {!! Form::text('name', null, array('class'=>'form-control','placeholder'=>'Enter Name')) !!}
    <div id ="name_error"></div>
    {!! Form::label('email', 'Email', array('class'=>'control-label')) !!}
    {!! Form::text('email', null, array('class'=>'form-control','placeholder'=>'Enter Email')) !!}
    <div id ="email_error"></div>
    {!! Form::label('password', 'Password', array('class'=>'control-label')) !!}
    {!! Form::password('password', array('class'=>'form-control', 'placeholder'=>'Password')) !!}   
    <div id ="password_error"></div>
    {!! Form::label('password_confirmation', 'Confirm Password',array('class'=>'control-label')) !!}
    {!! Form::password('password_confirmation', array('class'=>'form-control','placeholder'=>'Confirm Password')) !!}
    {!! Form::submit('Register', array('class'=>'btn btn-warning btn-lg')) !!}
{!! Form::close() !!}
<div id="successMessage"></div>
<script>
$( "#regForm" ).submit(function( event ) {    
  event.preventDefault();
  var $form = $( this ),
    data = $form.serialize(),
    url = $form.attr( "action" );
  var posting = $.post( url, { formData: data } );
  posting.done(function( data ) {
    if(data.fail) {
      $.each(data.errors, function( index, value ) {
        var errorDiv = '#'+index+'_error';
        $(errorDiv).addClass('required');
        $(errorDiv).empty().append(value);
      });
      $('#successMessage').empty();          
    } 
    if(data.success) {
        $('.register').fadeOut(); //hiding Reg form
        var successContent = '<div class="message"><h3>Registration Completed Successfully</h3><h4>Please Login With the Following Details</h4><div class="userDetails"><p><span>Email:</span>'+data.email+'</p><p><span>Password:********</span></p></div></div>';
      $('#successMessage').html(successContent);
    } //success
  }); //done
});
</script>
        </div>
    </body>
</html>

所以我的问题是我已经在我的 xampp 服务器上安装了 laravel。所以我想使用 post 发送一个 ajax 请求,但每当我发送请求时,它都会显示 500 Internal Server ErrorTokenMismatchException 。我已经在谷歌上搜索了所有内容并尝试了每一个但仍然得到同样的错误。我无法理解问题出在哪里,所以请任何人帮助我

【问题讨论】:

  • 显然问题出在 CSRF 令牌上。我没有注意到 html 中有任何错误 - 所以它应该出现在页面上。你能否在 'data = $form.serialize()' 之后添加 'console.log(data)' ,顺便说一下 - 你的语法有错误,你应该在每行语句后使用分号而不是逗号: var $form = $( 这个 ), 数据 = $form.serialize(),
  • 在 console.log(data) 之后,这个结果我得到 _token=AsQbtw87AujjiIXC6zc9WqJmlOrrXk8iPjQBjBrk&name=&email=&password=&password_confirmation=
  • @naneri ,我正在传递 CSRF 令牌但仍然收到错误

标签: php ajax laravel


【解决方案1】:

嗯嗯,

您的问题实际上是因为 CSRF 和我测试了您的代码,并且我在 VerifyCsrfToken.php 第 45 行错误中得到了 TokenMismatchException,因此要解决此问题,您需要使用 ajax 请求传递 CSRF _token 来解决您需要添加的问题

$_token = "{{ csrf_token() }}";

var 张贴 = $.post( url, { formData: data, _token: $_token } );

如果你最终的 javascript 代码看起来像这样

<script>
$( "#regForm" ).submit(function( event ) {    
  event.preventDefault();
  var $form = $( this ),
    data = $form.serialize(),
    url = $form.attr( "action" );

    $_token = "{{ csrf_token() }}";

  var posting = $.post( url, { formData: data, _token: $_token  } );
  posting.done(function( data ) {
    if(data.fail) {
      $.each(data.errors, function( index, value ) {
        var errorDiv = '#'+index+'_error';
        $(errorDiv).addClass('required');
        $(errorDiv).empty().append(value);
      });
      $('#successMessage').empty();          
    } 
    if(data.success) {
        $('.register').fadeOut(); //hiding Reg form
        var successContent = '<div class="message"><h3>Registration Completed Successfully</h3><h4>Please Login With the Following Details</h4><div class="userDetails"><p><span>Email:</span>'+data.email+'</p><p><span>Password:********</span></p></div></div>';
      $('#successMessage').html(successContent);
    } //success
  }); //done
});
</script>

【讨论】:

    【解决方案2】:

    您忘记将 url 操作添加到您的 Form::open

    改变这一行

    {!!Form::open(array('id'=>'regForm','method'=>'get'))!!} 
    

     {!!Form::open(array('id'=>'regForm','action' => 'register','method'=>'get'))!!} 
    

    【讨论】:

    • 我已经进行了更改,但仍然遇到同样的错误
    • 试试这个 {!!Form::open(array('id'=>'regForm','url'=>'register'))!!}
    • 但我的问题是内部服务器错误和令牌不匹配,仍然出现此错误
    猜你喜欢
    • 2017-06-14
    • 2017-01-11
    • 2015-03-30
    • 2013-10-31
    • 2015-09-21
    • 2020-12-07
    • 2018-11-14
    • 1970-01-01
    • 2015-05-26
    相关资源
    最近更新 更多