使用ajax和jquery发送数据和文件

时间:2014-11-24 08:54:00

标签: javascript jquery ajax

我知道有topic发言 我跟着它,但我的代码仍有问题 这是我的代码

var id_dossier              = $('#jform_id').val();
        var date_facture            = $('#jform_date_facture').val();
        var date_paiement_facture   = $('#jform_date_paiement_facture').val();
        var mode_paiement_facture   = $("select#jform_mode_paiement_facture option").filter(":selected").val();
        var idBanque                = $("select#jform_id_banque option").filter(":selected").val();
        var idCompte                = $("select#jform_id_compte option").filter(":selected").val();
        var cheque_facture          = $('#jform_cheque_facture').val();
        var montant_cheque          = $('#jform_montant_cheque').val();
        var numero_facture          = $('#jform_numero_facture').val();
        var numero_retenu_source    = $('#jform_numero_retenu_source').val();
        var echeance                = $('#jform_valeur_echeance').val();
var document_facture        = document.getElementById('facture_document');

document_facture是文件输入

然后我把数据放在另一个叫做donnee的var中

var donnee ={
                        'id_dossier' : id_dossier,
                        'date_facture' : date_facture,
                        'date_paiement_facture' : date_paiement_facture,
                        'mode_paiement_facture' : mode_paiement_facture,
                        'id_banque' : idBanque,
                        'id_compte' : idCompte,
                        'cheque_facture' : cheque_facture,
                        'montant_cheque' : montant_cheque,
                        'numero_facture' : numero_facture,
                        'numero_retenu_source' : numero_retenu_source,
                        'echeance' : echeance,
                        'document_retenu_source' : document_retenu_source
                    };

在另一个问题中,有这行代码,我不知道是什么,我怎么能在我的代码中替换它

var formData = new FormData($(this)[0]);

所以我用这个替换它

var formData = new FormData();
        formData.append('documents', document_facture.files[0]);

我将它添加到Ajax请求的数据

$.ajax({
                type:  'post',
                cache:  false ,
                url:  'index.php?option=com_tktransit&task=dossier.genererFacture',
                data: {donnee:donnee,formData:formData },
                success: function(resp)
                {

                    if(resp == "1")
                    {
                        ajax_result_message("<?php echo JText::_( 'COM_TKTRANSIT_DOSSIER_FACTURE_GENERER' ); ?>",0,'facture');
                        afficher_button(2);
                        $('#td_facturation').html("<?php echo JText::_( 'COM_TKTRANSIT_FACTURE_DEJA_FACTURER' ); ?>");
                        $('#td_check_facturation').hide();
                        generate_pdf(id_dossier);
                    }
                    else if(resp == "2")
                    {
                        ajax_result_message("<?php echo JText::_( 'COM_TKTRANSIT_DOSSIER_FACTURE_NUMERO_FACTURE_EXISTE_DEJA' ); ?>",1,'facture');   
                    }
                    else
                        ajax_result_message("<?php echo JText::_( 'COM_TKTRANSIT_DOSSIER_FACTURE_ERREUR_GENERER_FACTURE' ); ?>",1,'facture');   
                    $("#ajax-facture-image_loader").hide();
                },
                error: function(XMLHttpRequest, textStatus, errorThrown)
                { 
                    ajax_result_message("<?php echo JText::_( 'COM_TKTRANSIT_DOSSIER_FACTURE_ERREUR_GENERER_FACTURE' ); ?>",1,'facture');   
                    $("#ajax-facture-image_loader").hide();
                }   

              });

当我点击按钮调用ajax函数时,我收到了这个错误 TypeError:&#39;追加&#39;调用了一个没有实现接口FormData的对象。 请帮忙

1 个答案:

答案 0 :(得分:0)

您应该将所有变量放在html页面中的表单上,所以,行

var formData = new FormData($(this)[0]);

将成为

var formData = new FormData($('#yourFormUniqueId')[0]);

我认为您可以通过this answer

找到更多详情