2017-02-10 72 views
1

我是Larvael的新手,我使用laravel 5.3。我想創建一個文本字段,它會自動提示一些數據,當我選擇一個數據時,它會添加到數組中。我想發送那個arry到控制器進一步使用。爲此,如何在laravel中使用ajax 5.3

視圖文件如下:

<head> 
    <script src="http://code.jquery.com/jquery-1.10.2.js"></script> 
    <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> 
    <script> 
     $(document).ready(function() { 
      var members = {!! json_encode($member) !!}; 
      console.log(members); 
      var arr = []; 
      $("#tags").autocomplete({ 
       source: members, 
       select: function (event, ui) { 
        arr.push(ui); 
        console.log(arr); 
       } 
      }); 
      $("#submit").click(function(event){ 
       $.ajax({ 
        type: "POST", 
        url: '/storeresearch', 
        data: {selectedMembers: arr}, 
        success: function(msg) { 
         console.log(msg); 
        } 
       }); 
      }); 
     }); 
     </script> 
</head> 
<body> 
<form id="hu" action="/storeresearch" method="POST"> 
    {!! csrf_field() !!} 
    <label>Research Author</label> 
    <input type="text" id="tags" name="researchsupervisor_1" value=""> 
    <input type="submit" name="submit" id="submit" class="btn btn-primary" value="Add"> 
</form> 
</body> 

我的控制器文件如下:

public function store(Request $request){ 
     if($request->ajax()) 
     { 
      $mem = $request->all(); 
      return response()->json($mem,200) ; 
     } 
     else{ 
      return "not found"; 
     } 

而且web.php是如下:

Route::post('/storeresearch','[email protected]'); 

但似乎沒有ajax調用發生。在控制器中,它總是進入else部分。有什麼問題可以幫助嗎?

+0

變化''到'解決了這個問題'然後請嘗試 –

+0

是的,它會觸發ajax調用,但不會發生此操作。它仍然在同一頁 –

+0

這就是阿賈克斯所代表的。當你處理ajax時,你的頁面不會刷新。 –

回答

0

我通過執行以下

$.ajax({ 
       type:'POST', 
       url:'your url', 
       data:{_token: "{{ csrf_token() }}" 
       }, 
       success: function(msg) { 
       } 
      }); 
1

嘗試一些事情是這樣的:

$.ajax({ 
    url  : '/login', 
    method : 'post', 
    data : { 
     login_username : userName, 
     password  : password 
    }, 
    headers: 
    { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    }, 
    success : function(response){ 

    } 
}); 

路線:

Route::post('/login',[ 
    'uses' => '[email protected]' 
]); 

控制器的方法:

public function login() 
{ 
    $userName = INPUT::get('login_username'); 
    $password = INPUT::get('password'); 

    // your logic 
} 
+0

它仍然無法正常工作。 :( –

+0

在控制檯中的任何錯誤? –

+0

沒有沒有錯誤 –

1

您的代碼大多看起來不錯。但是當您使用POST請求時,您錯過了發送帶有AJAX調用的csrf標記。

您可以通過這種方式與AJAX調用發送CSRF令牌:

<meta name="csrf-token" content="{{ csrf_token() }}"> 

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

更多信息:https://laravel.com/docs/5.3/csrf#csrf-x-csrf-token

當你點擊按鈕,它真的觸發AJAX調用?請檢查瀏覽器的網絡標籤。

+0

我也試過,但沒有改變。當我按下它不會觸發任何ajax調用()。:( –

1

請求的名稱空間聲明是什麼?

如果是use Illuminate\Http\Request;嘗試use Request;

+0

我已經嘗試過,但doesn也不行 –