使用ajax和bootbox进行非法调用

时间:2015-03-23 13:25:30

标签: javascript jquery ajax bootbox

大家早上好。

所以我一直在使用jquery的bootbox插件来处理这个系统,以制作一系列精美的窗口和表单,用于处理和管理等等。在这种特殊情况下,我有一个接收函数,点击链接后,获取订单数据,然后构建一个表单并发回该表单。然后,当我单击提交时,它仍应处理,但在这种情况下,我收到illegal invocation错误。我已经在bootbox调用之外的ajax和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 个答案:

答案 0 :(得分:1)

这是因为jQuery ajax会自动尝试将数据强制转换为字符串,而这个字符串位于不可合并的formadata对象中。

要解决此问题,您需要将这两个选项添加到第二个请求中:

processData: false,
contentType: false

您可以阅读有关选项的更详细说明on the documentation.另请参阅thisthis个问题。