2016-06-08 56 views
0

我在div中有formLaravel 5.0中的TokenMismatchException

<div class="form-container col-sm-12 container-fluid"> 
<meta content="{{ csrf_token() }}" name="_token"> 
<form class="form" id="register_form" method="POST" novalidate> 
    <!-- <input type="hidden" value="{{ csrf_token() }}" name="_token" id="token"> --> 
    <div class="form-group" id="error_msg"></div> 
    <div class="form-group name">       
     <input type="text" class="form-control input-sm" role="group" id="name" placeholder="Name" name="name" required>     
    </div> 
    <div class="form-group email"> 
     <input type="email" class="form-control input-sm" id="email" placeholder="Email" name="email" required>  
    </div> 
    <div class="form-group contact_no"> 
     <input type="text" class="form-control input-sm" id="contact_no" placeholder="Contact No" name="contact_no" required> 
    </div> 
    <div class="form-group select_level"> 
     <select class="form-control input-sm" name="level_interested" id="level_interested" required> 
      <option class="form-control" selected disabled value="">Level Interested</option> 
      <option class="form-control" value="bachelor">Bachelor</option> 
      <option class="form-control" value="masters">Masters</option> 
      <option class="form-control" value="phd">Phd</option> 
      <option class="form-control" value="nursing">Nursing</option> 
     </select> 
    </div> 
    <div class="form-group select_country"> 
     <select class="form-control input-sm" name="country_interested" id="country_interested" required> 
      <option class="form-control" selected disabled value="">Country Interested</option> 
      <option class="form-control" value="usa">U.S.A</option> 
      <option class="form-control" value="australia">Australia</option> 
      <option class="form-control" value="canada">Canada</option> 
      <option class="form-control" value="india">India</option> 
      <option class="form-control" value="new_zealand">New Zealand</option> 
     </select> 
    </div> 

    <div class="form-group"> 
     <button type="submit" class="btn btn-success btn-sm">Register</button> 
    </div> 
</form>  

form提交,驗證進行的。驗證成功後,我使用Ajax發送輸入數據並顯示警報消息作爲響應。

form.submit(function() { 
     if(validateName() & validateEmail() & validateContact_No() & validateLevel() & validateCountry()) { 

      $.ajaxSetup({ 
       headers: { 
        'X-CSRF-Token': $('meta[name="_token"]').attr('content') 
       } 
      }); 

      $.ajax({ 
       type : 'post', 

      url: "{{ route('save_registry') }}", 

      data: { 
       'name' : name.val(), 
       'email' : email.val(), 
       'contact_no' : contact_no.val(), 
       'level_interested' : level_interested.val(), 
       'country_interested' : country_interested.val(), 
      }, 

      success : function(data) { 

        alert(data); 

      } 
     }); 
      return true; 
     } else { 
      $('#error_msg').text("Please Enter Details Correctly").show().addClass('text-danger').addClass('text-center'); 
      return false; 
     } 

這是我在Controllerfunction來處理請求。

public function save_registry(Request $request) 
{ 


    $new_registry = new Register(); 

    $email = Register::where('email','=',$request->email)->exists(); 
    if($email==true) 
    { 
     return 'Email already exists'; 
    } 
    else{ 
     $new_registry -> name = $request -> name; 
     $new_registry -> email = $request -> email; 
     $new_registry -> contact_no = $request -> contact_no; 
     $new_registry -> level_interested = $request -> level_interested; 
     $new_registry -> country_interested = $request -> country_interested; 
     $new_registry->save(); 
     return 'Registered Successfully'; 
    } 
} 

當我提交form後,彈出警告。關閉警報後,我收到TokenMismatchException錯誤。我只有當form's methodPOST而不是GET時纔會出現此錯誤。那麼當methodPOST時,有沒有解決方案可以避免錯誤?

+0

閱讀文檔您是否嘗試過'X-CSRF-TOKEN'而不是'X-CSRF-Token'不確定頭是否區分大小寫 –

+1

頭不區分大小寫。 「form」成功提交後,我只得到'TokenMismatchException'。 '表格'數據也被成功插入到數據庫中。 'Alert'和'controller's function'的信息也會彈出。但是在關閉'alert'後,我得到'TokenMismatchException'。如果'token'不匹配,我會在我點擊'submit'後立即得到錯誤,而不是在關閉'alert'後。 –

+0

聽起來像你需要防止提交原始表單,然後添加回調變量e來提交函數並使用'e.preventDefault();' –

回答

1

當您通過POST提交表單時,Laravel會尋找名爲_token的屬性。我看到你已經有了這個<meta>標籤,所以你有兩種方法可以在你的表格中獲得這個。

首先,你可以在你的<form>地方創建一個新的<input type="hidden" name="_token" value="{{ csrf_token() }}"/>元素,並確保通過您的AJAX傳遞時,該方法是POST

data: { 
    '_token' : _token.val(), 
    'name' : name.val(), 
    'email' : email.val(), 
    'contact_no' : contact_no.val(), 
    'level_interested' : level_interested.val(), 
    'country_interested' : country_interested.val(), 
}, 

或者,因爲你已經有一個了conent <meta>標籤,你可以將其包含在你的Ajax像這樣:

data: { 
    '_token' : $('meta[name="_token"]').attr('content'), 
    'name' : name.val(), 
    'email' : email.val(), 
    'contact_no' : contact_no.val(), 
    'level_interested' : level_interested.val(), 
    'country_interested' : country_interested.val(), 
}, 

不管如何你這樣做,只要確定有y中說_token屬性我們的POST數據,它應該爲你工作。希望有所幫助!

相關問題