Незаконный вызов с использованием ajax и bootbox

Доброе утро всем.

Так что я работал над этой системой, используя плагин bootbox для jquery, чтобы создать замечательную серию окон и форм, которые выполняют обработку и управление заказами и так далее. В этом конкретном случае у меня есть функция получения, которая по щелчку ссылки выбирает данные заказа, затем строит форму и отправляет ее обратно. Затем, когда я нажимаю кнопку отправить, он все равно должен обрабатываться, но в этом случае я получаю illegal invocationошибка. Я пробовал эту функцию как с ajax вне вызова bootbox, так и внутри обратного вызова под success, Мне не повезло в обоих направлениях, поэтому я надеюсь, что кто-нибудь может помочь мне решить эту проблему.

Вот мой код ниже:

$('#new-inventory').on('click', '.receive', function(e){
    e.preventDefault();
    var id = $(this).data('id');
    $.ajax({
        url : 'assets/server/home/receive.php',
        type : 'POST',
        data : {id : id},
        dataType : 'JSON',
        success : function(data){
            bootbox.dialog({
                title : "Receive Tires",
                className : 'receive-tires-window',
                message : "<main class='row'>"+
                    "<section class='col-xs-12'>"+
                        data.message+
                    "</section>"+
                "</main>",
                buttons : {
                    success : {
                        label : 'Receive',
                        className : 'btn-success',
                        callback : function(){

                            e.preventDefault();
                            var formData = new FormData($('#rcvfrm')[0]);
                            $.ajax({ //error received right here
                                url : 'assets/server/home/process_receiving.php',
                                type : 'POST',
                                data : formData,
                                dataType : 'JSON',
                                success : function(data){
                                    if(!data.errors){
                                        bootbox.alert(data.message, function(){
                                            location.reload();
                                        });
                                    }else{
                                        bootbox.alert(data.message);
                                    }
                                }
                            });

                            return false;
                        }
                    },
                    danger : {
                        label : 'Cancel',
                        className : 'btn-danger',
                        callback : function(){

                        }
                    }
                }
            });

            $('.receive-tires-window').on('shown.bs.modal', function(){
                $('.receive-tires-window #recv_date').datepicker();
            });

        }
    });
});

1 ответ

Решение

Это связано с тем, что jQuery ajax автоматически пытается привести данные к строке, которая есть в необратимом объекте formadata.

Чтобы это исправить, вам нужно добавить эти два параметра во второй запрос:

processData: false,
contentType: false

Вы можете прочитать более подробное объяснение вариантов в документации. Смотрите также этот и этот вопросы.

Другие вопросы по тегам