Laravel - 来自Checkboxes的AJAX POST选择数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel - 来自Checkboxes的AJAX POST选择数组相关的知识,希望对你有一定的参考价值。
我有一个我正在尝试修复的AJAX帖子,但是输入上有很多复选框,我卡住了。
此刻,说我是这样的:
<input type="checkbox" name="billToEmail[]" value="email1@email.com">email1@email.com
<input type="checkbox" name="billToEmail[]" value="email2@email.com">email2@email.com
我有一个名为“发送通知”的按钮,它启动以下脚本:
<script>
$('.modal-footer').on('click', '.sendNotificationNow', function() {
$.ajax({
type:'POST',
url: '/shipments/sendNotifications',
data: {
'billTo': $('.billToEmail:checked').val(),
'shipTo': $('.shipToEmail:checked').val(),
'shipFrom': $('.shipFromEmail:checked').val(),
'_token': $('input[name=_token]').val(),
},
success: function(data) {
$('.errorTitle').addClass('hidden');
$('.errorContent').addClass('hidden');
if ((data.errors)) {
setTimeout(function () {
$('#sentNotifications').modal('show');
toastr.error('Validation error - Check your inputs!', 'Error Alert', {timeOut: 5000});
}, 500);
if (data.errors.title) {
$('.errorTitle').removeClass('hidden');
$('.errorTitle').text(data.errors.title);
}
if (data.errors.content) {
$('.errorContent').removeClass('hidden');
$('.errorContent').text(data.errors.content);
}
} else {
toastr.success('Successfully Sent Notifications!', 'Success Alert', {timeOut: 5000});
$('div.notificationssent').fadeOut();
$('div.notificationssent').load(url, function() {
$('div.notificationssent').fadeIn();
});
}
},
});
});
</script>
现在,我确定我的问题突然出现在顶部附近,我试图将多个值“转换”为数据变量。我应该放除.val()以外的东西吗?
我还有一些这样的字段,我需要使用多个复选框,但如果我可以单独为billToEmail获得一些帮助,我相信我可以修复其余部分。
首先,你不需要[]
标志。所以,你的复选框html将如下所示:
<input type="checkbox" name="billToEmail" value="email1@email.com">email1@email.com
<input type="checkbox" name="billToEmail" value="email2@email.com">email2@email.com
其次,您需要使用foreach将复选框上的选定值推送到javascript数组变量中:
var billToEmail= [];
$("input:checkbox[name=billToEmail]:checked").each(function(){
billToEmail.push($(this).val());
});
第三,你需要使用JSON.stringify()
将javascript数组转换为字符串。
billToEmails= JSON.stringify(billToEmail);
然后,将billToEmails
变量传递给AJAX中的数据。所以,它看起来像这样:
var dataString = "billTo="+billToEmails+"&shipTo="+$('.shipToEmail:checked').val()+"&shipFrom="+$('.shipFromEmail:checked').val()+"&_token="$('input[name=_token]').val();
$.ajax({
type:'POST',
url: '/shipments/sendNotifications',
data: dataString,
为了php可以获取数组,您需要首先使用控制器中的json_decode解码billToEmails
字符串。
$variable = json_decode($request->billTo,true);
试试这个-
billtoemail = $('input[name='billToEmail[]']:checked").map(function () {
return this.value;
}).get();
要么
billtoemail= new Array();
$("input[name='billToEmail[]']").each(function(){
billtoemail.push(this.value);
});
现在像你的ajax中的其他变量一样发送这个变量billtoemail
。在您的控制器中,您可以通过简单的foreach($request->billTo as $billtoemail)
获取所有值
以上是关于Laravel - 来自Checkboxes的AJAX POST选择数组的主要内容,如果未能解决你的问题,请参考以下文章
通过 user32.dll 在 Listbox 中选择 CheckBoxes? (
必须单击两个单选按钮/复选框/按钮中的一个,Laravel 5.2