2017-04-04 57 views
4

我需要通過按鈕單擊將數據通過JS發送到Laravel控制器。我沒有使用任何形式,因爲數據是動態創建的。 每次我嘗試發送數據時,都會收到內部服務器錯誤(500),但無法捕獲控制器或laravel.log文件中的異常。Laravel:通過AJAX將數據發送到控制器不帶表格

下面是我在做什麼:

路線:

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

控制器:

public function saveContactItems($id, $type, $items, $languageID = "PT"){ ... } 

JS:

$('button').on("click", function (evt) { 

    evt.preventDefault(); 

    var items = []; 
    var id = $("#id").val(); 
    var languageID = $("#languageID").val(); 
    var data = { id: id, type: type, items: JSON.stringify(items), languageID: languageID }; 

    $.ajax({ 
     url: "/section/saveContactItems", 
     type: "POST", 
     data: data, 
     cache: false, 
     contentType: 'application/json; charset=utf-8', 
     processData: false, 
     success: function (response) 
     { 
      console.log(response); 
     } 
    }); 
}); 

我到底做錯了什麼?我怎樣才能做到這一點?

更新:感謝@ ShaktiPhartiyal的answer(和@ Sanchit的幫助)我能解決我的問題。如果有其他人遇到類似的問題,在遵循@ Shakti的答案之後,我無法訪問控制器中的數據。所以,我不得不把它發送到服務器之前字符串化數據:

data: JSON.stringify(data), 
+0

當您使用POST,你必須通過'csrf_token'場... –

+0

@sanchitGupta我已經試過了,但不成功太... – Ricky

+0

好吧......讓我們從@ShaktiPhartiyal嘗試回答下面....並讓我知道,如果它的工作 –

回答

4

你並不需要使用

public function saveContactItems($id, $type, $items, $languageID = "PT"){ ... } 

你必須做到以下幾點:

public function saveContactItems() 
{ 
    $id = Input::get('id'); 
    $type = Input::get('type'); 
    $items = Input::get('items'); 
    $languageID = Input::get('languageID'); 
} 

是的,因爲@Sanchit Gupta建議您需要發送帶請求的CSRF令牌:

方法s到發送CSRF令牌AJAX:

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

如果你使用這種方法,你需要設置一個meta標籤,像這樣:

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

data: { 
     "_token": "{{ csrf_token() }}", 
     "id": id 
     } 

UPDATE

as @Sanchit Gupta指出使用輸入門面像這樣:

use Input; 
+0

我終於可以訪問控制器的行動:)現在我得到以下錯誤:異常'Symfony \ Component \ Debug \ Exception \ FatalErrorException'消息'類'App \ Http \ Controllers \ Input'找不到'。這是由$ id = Input :: get('id'); – Ricky

+2

在控制器頂部使用'Input'外觀 –

+0

解決了錯誤,但數據出現爲空。這是我發送給控制器的:Object {id:「5」,type:「email」,items:「[]」,languageID:「PT」} – Ricky

相關問題