Laravel - 来自Checkboxes的AJAX POST选择数组

问题描述 投票:1回答:2

我有一个我正在尝试修复的AJAX帖子,但是输入上有很多复选框,我卡住了。

此刻,说我是这样的:

<input type="checkbox" name="billToEmail[]" value="[email protected]">[email protected]
<input type="checkbox" name="billToEmail[]" value="[email protected]">[email protected]

我有一个名为“发送通知”的按钮,它启动以下脚本:

<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获得一些帮助,我相信我可以修复其余部分。

javascript jquery ajax laravel laravel-5
2个回答
3
投票

首先,你不需要[]标志。所以,你的复选框html将如下所示:

<input type="checkbox" name="billToEmail" value="[email protected]">[email protected]
<input type="checkbox" name="billToEmail" value="[email protected]">[email protected]

其次,您需要使用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);

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)获取所有值

© www.soinside.com 2019 - 2024. All rights reserved.