在我的页面上,我有一个input
用户填写。
然后,在我的JS中,我有一个对象,就像这样:
var obj = {
sort: 'newest',
num: 10,
values: [1, 2, 3, 4]
};
如您所见,该对象包含各种类型(字符串,整数和数组)。我需要将input
值和对象的数据传递给Laravel,并使用原始类型(即字符串,整数,数组)发布请求。
但目前,所有数据都以字符串形式传递:
https://i.stack.imgur.com/y6NGU.png
这是我目前的代码:
$('form').on('submit', function (event)
{
event.preventDefault();
var form = $(this);
var data = form.serializeArray();
$.each(obj, function (key, val)
{
data.push({ name: key, value: val });
});
$.ajax({
url: 'https://website.com/save',
type: 'post',
data: data,
dataType: 'json',
success: function (data)
{
//
}
});
});
我应该更改什么才能将数据作为各自的类型传递?
答案 0 :(得分:0)
你必须改变如下的jQuery代码:
var obj = {
sort: 'newest',
num: 10,
values: [1, 2, 3, 4]
};
$.ajax({
url: 'https://example.com/save',
type: 'post',
data: $.param(obj), //will become e.g. sort='newest'&num=10&etc..
contentType: "application/x-www-form-urlencoded; charset=UTF-8", // this is the default value, so it's optional
dataType: 'json',
success: function (data)
{
//
}
});
答案 1 :(得分:0)
正如@Ivar在评论中所提到的,将您的数据按编码发送并在服务器中解码。
因此您需要将JS更改为
$('form').on('submit', function (event) {
event.preventDefault();
var formdata = new FormData();
formdata.append('form', $(this).serialize());
formdata.append('obj', JSON.stringify(obj));
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: 'https://website.com/save',
type: 'POST',
data: formdata,
processData: false,
contentType: false,
success: function (data)
{
//
}
});
});
并且在您的控制器方法中,您可以将值解码为
public function yourMethod(Request $request)
{
// You could access the form variables in $output array
parse_str($request->form, $output);
// Decode the obj variable
$obj = json_decode($request->obj, TRUE);
}