Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ajax和jquery发送数据和文件_Javascript_Jquery_Ajax - Fatal编程技术网

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

Javascript 使用ajax和jquery发送数据和文件,javascript,jquery,ajax,Javascript,Jquery,Ajax,我知道有人在谈论这件事 我遵循了它,但我的代码仍然有问题 这是我的密码 var id_dossier = $('#jform_id').val(); var date_facture = $('#jform_date_facture').val(); var date_paiement_facture = $('#jform_date_paiement_facture').val(); var m

我知道有人在谈论这件事 我遵循了它,但我的代码仍然有问题 这是我的密码

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');
文档制作是文件输入

然后我把数据放在另一个变量中,我称之为donnee

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({
键入:“post”,
cache:false,
url:'index.php?option=com\u tktransit&task=docsier.generarfacture',
数据:{donnee:donnee,formData:formData},
成功:功能(resp)
{
如果(响应=“1”)
{
ajax_结果_消息(“,0,'facture”);
粘贴按钮(2);
$('td#u factourization').html(“”);
$('td#u check_factourization').hide();
生成pdf(id\U档案);
}
否则如果(resp==“2”)
{
ajax_结果_消息(“,1,'facture”);
}
其他的
ajax_结果_消息(“,1,'facture”);
$(“#ajax-facture-image_loader”).hide();
},
错误:函数(XMLHttpRequest、textStatus、errorshown)
{ 
ajax_结果_消息(“,1,'facture”);
$(“#ajax-facture-image_loader”).hide();
}   
});
当我点击按钮调用ajax函数时,我得到了这个错误 TypeError:对未实现接口FormData的对象调用了“append”。
请提供任何帮助

您应该将所有变量放在html页面的表单上,因此

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

将成为

var-formData=new-formData($('yourFormUniqueId')[0])


我想你可以通过

找到更多细节,你应该检查一下
ajaxForm
插件:在我的表单中,我有很多文件,用户可以添加很多输入文件,如果你提到我使用的是joomla 2.5,我有一个主表单,我还加了很多template@Rad为什么不将特定的文件放在一个单独的表单中,并用ajax发布它?@Rad您的用户可以添加大量文件是什么意思?正如我看到的,你选择只发布特定的值。我有一个按钮,它生成一个javascript代码,允许用户添加一个文件类型的输入。我的意思是,当用户喜欢添加一些文件时(有时2文件有时5),他点击按钮,所以我生成一个输入文件type@Rad好吧,没关系,但你什么时候需要这些文件?在上面的代码中,您只需使用一个精确的文件。通过这种方式,您可以将该字段(用于其他文件)添加到另一个表单中,并单独发布,然后如上所述发布该文件。我错过什么了吗?