2016-03-22 233 views
4

Hello StackOverflow系列。這是我第一個問題,我希望能得到幫助。如何通過post方法將數據從ajax傳遞給laravel 5.2控制器

我是laravel框架的新手,並在我的項目中使用5.2版本。 我正在試圖使用post方法從我的ajax函數傳遞數據到特定的控制器方法,但是沒有數據被傳遞給控制器​​。

我按照這個論壇中的步驟https://laracasts.com/discuss/channels/laravel/process-data-in-controller-using-ajax-in-laravel,但不能得到它的工作。這是我迄今爲止所做的。

我的JavaScript(post_script.js):

$.ajax({ 
    method: 'POST', 
    url: './home', 
    data: { 
     userID: 76, 
     userName: 'Jimmy' 
    }, 
}); 

注意,此文件在laravel結構保存在assets/js目錄。以下是我在我的路由文件(routes.php):

Route::get('/', "[email protected]"); 
Route::get('home', "[email protected]"); 

下面是我在MyController.php文件中的函數:

function home(Request $request) { 
    $userID = $request['userID']; 
    $userName = $request['userName']; 
    return view('home', [ 
     'userID'=> $userID, 
     'userName' => $userName 
    ]); 
} 

在我看來,我試圖訪問它像這樣:

<p>User ID: {{$userID}}</p> 
<p>User Name: {{$username}}</p> 

什麼都沒有顯示!請問我做錯了什麼?我需要你的幫助。如果我的問題不正確,請原諒我,但我希望你明白我的意思。謝謝

+0

你能確認該數據確實被張貼到期望的路線?例如,在您的瀏覽器控制檯中,發佈數據時會獲得哪些HTTP響應代碼?你有沒有嘗試直接在控制器中轉儲'$ request'的內容? – alexw

回答

8

你的AJAX的張貼,但你有沒有POST路由集合,只有GET。添加POST路線,像這樣:

Route::post('home', "[email protected]"); 
0

首先,您需要設置數據類型這樣的Ajax請求(如果你使用jQuery)

$.ajax({ 
    method: 'POST', 
    url: './home', 
    dataType: 'json' 
    data: { 
     userID: 76, 
     userName: 'Jimmy' 
    }, 
}) 

然後嘗試使用到您的控制器遵循

Request::json() 

,看看導致

您也可以使用Input :: get():

Request::get('userID') 
3

首先檢查您的開發人員/網絡工具(例如,螢火蟲)您的ajax呼叫到達所需的控制器/功能並且參數正確轉發。

在Laravel的環境Ajax調用指定的URL安全的方法是使用URL門面是這樣的:

url: "{{ URL::to('home'); }}", 

爲了像這樣做,但是你必須存儲你的JS作爲的MyScript。 blade.php(!!)文件和@相應地包含到你的視圖中。

爲了在控制器函數中接收您發佈的參數,不需要聲明函數參數,您可以簡單地使用Input :: Get()函數,例如。像這樣:

public function home() 
{ 
    $userID = Input::Get('userID'); 
    $userName = Input::Get('userName'); 
    return view('home', [ 'userID'=> $userID, 'userName' => $userName ]); 
} 
1

如果您嘗試執行POST請求,您可能需要有X-CSRF-Token

一下添加到元:

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

和設置您的AJAX:

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

在Laravel文檔:https://laravel.com/docs/5.2/routing#csrf-x-csrf-token

0

您可以使用路由名稱將數據傳遞給控制器​​

$.ajaxSetup({ 
      headers:{'X-CSRF-TOKEN': $("meta[name='csrf-token']").attr('content')} 
     }); 
     $.ajax({ 
      type:'POST', 
      url: '{{route("route_name_with_post_method")}}', 
      data:{ 
       'id': data 
      }, 
      success:function(r){ 

      },error:function(r) { 

      } 
     }); 
相關問題