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好吧,没关系,但你什么时候需要这些文件?在上面的代码中,您只需使用一个精确的文件。通过这种方式,您可以将该字段(用于其他文件)添加到另一个表单中,并单独发布,然后如上所述发布该文件。我错过什么了吗?