我有一个我想要修复的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获得一些帮助,我相信我可以修复其余部分。
答案 0 :(得分:3)
首先,您不需要[]
标志。因此,您的复选框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);
答案 1 :(得分:0)
试试这个 -
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)