2017-04-04 129 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

相关问题