我需要通过JS在按钮点击时将数据发送到Laravel控制器。我没有使用任何表单,因为数据是动态创建的。 每次我尝试发送数据时,都会收到内部服务器错误(500),但无法在控制器或laravel.log文件中捕获该异常。
这就是我正在做的事情:
路线:
Route::post('section/saveContactItems', 'SectionController@saveContactItems');
控制器:
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的(以及@ Sanchit的帮助),我能够解决我的问题。如果其他人遇到类似的问题,在关注@ Shakti的回答后,我无法访问控制器中的数据。因此,我必须在将数据发送到服务器之前对其进行字符串化处理:
data: JSON.stringify(data),
答案 0 :(得分:5)
您无需使用
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令牌:
在AJAX中发送CSRF令牌的方法:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
如果您使用此方法,则需要设置如下的元标记:
<meta name="csrf-token" content="{{csrf_token()}}">
或
data: {
"_token": "{{ csrf_token() }}",
"id": id
}
<强>更新强>
正如@Sanchit Gupta指出的那样使用输入外观:
use Input;