2015-09-24 21 views
2

我想使用Laravel 5做一個簡單的Ajax帖子。我讀了Csrf令牌匹配有一個問題,並且我可以把我的uri放入VerifyCsrfToken期望來繞過這個。這部分功能,但是現在,當我發佈帖子時,我收到了422錯誤。錯誤422阿賈克斯發佈使用Laravel

enter image description here

enter image description here

難道我擺烏龍在我的代碼?我怎樣才能得到這個工作?以下是我有:

HTML:

<div class = "q-form"> 
        {!!Form::open(array('url' => 'questions')) !!} 
         <div class = "form-group"> 
          {!! Form::hidden('user_id', $myid, ['class' => 'form-control']) !!} 
          {!!Form::label('title', 'Title:')!!} 
          {!!Form::text('title', null, ['class'=> 'form-control'])!!} 

          {!!Form::label('question', 'Question:')!!} 
          {!!Form::textarea('question', null, ['class'=> 'form-control area', 'placeholder' => 'What would you like to ask?'])!!} 


         {!!Form::submit('Ask!', ['class'=> 'btn btn-danger form-control ask'])!!} 
         </div> 
        {!! Form::close() !!} 
       </div> 

JS:

$('.ask').click(function(e) { 

     e.preventDefault(); 

     var postData = $(this).serializeArray(); 

     var base_url = 'http://rem-edu-es.eu1.frbit.net/'; 
     $.ajax({ 
      type: "POST", 
      url: base_url + "questions", 
      data: postData, 
      success: function (data) { 
       console.log(data); 
      } 

     }); 
    }); 

控制器:

public function book() 
{ 

    if(Request::ajax()){ 

     return Response::json(Input::all()); 

    } 
} 

VerifyCsrfToken:

class VerifyCsrfToken extends BaseVerifier 
{ 

    protected $except = [ 
     'book/*', 
     'book', 
     'questions' 

    ]; 
} 
+0

什麼是開發者控制檯顯示在該響應的網絡選項卡中的錯誤? – JSelser

+0

我在網絡選項卡中看不到錯誤。只是這在控制檯POST http://rem-edu-es.eu1.frbit.net/questions 422(不可處理的實體) –

+0

這裏添加錯誤控制檯的照片。這次它確實發生了一個錯誤。 –

回答

2

422是默認響應驗證失敗時。 處理ajax響應時,需要處理「成功」和「錯誤」。從我的代碼示例:

$.ajax({ 
    url: $(this).data('url'), 
    type: "post", 
    dataType: "json", 
    data: values, 
    success: function (data) { 
     $('#list').append(data.view); 
    }, 
    error: function (data) { 
     var errors = $.parseJSON(data.responseText); 
     $.each(errors, function (key, value) { 
      $('#' + key).parent().addClass('error'); 
     }); 
    } 
}); 

順便說一句,你可以通過一個_token參數與阿賈克斯後,那麼你就需要禁用CSRF保護。只需添加一個隱藏輸入

{!! Form::token() !!} 

以您通過ajax發送到服務器的形式。

-1

嘗試在響應加狀態代碼:

public function book() 
{ 
    if(Request::ajax()){ 
     return Response::json(Input::all(), 200); 
    } 
} 
+0

用戶想要格式化從jquery到html的響應,顯示錯誤 –

0

錯誤處理響應中的一個對象。

error :function(data) { 
     if(data.status === 422) { 
      var errors = $.parseJSON(data.responseText); 
      $.each(errors, function (key, value) { 
       // console.log(key+ " " +value); 
      $('#response').addClass("alert alert-danger"); 

       if($.isPlainObject(value)) { 
        $.each(value, function (key, value) {      
         console.log(key+ " " +value); 
        $('#response').show().append(value+"<br/>"); 

        }); 
       }else{ 
       $('#response').show().append(value+"<br/>"); //this is my div with messages 
       } 
      }); 
      } 

enter image description here