Php Ajax:将formData与自定义变量一起发送
我正在尝试用ajax上传图片 如果我喜欢这样做,这会起作用:Php Ajax:将formData与自定义变量一起发送,php,jquery,ajax,form-data,Php,Jquery,Ajax,Form Data,我正在尝试用ajax上传图片 如果我喜欢这样做,这会起作用: $("#adv_cover").change(function(e){ e.preventDefault(); var formData = new FormData($('#adv_form_cover')[0]); $.ajax({ type: 'POST', url: 'edit.php', da
$("#adv_cover").change(function(e){
e.preventDefault();
var formData = new FormData($('#adv_form_cover')[0]);
$.ajax({
type: 'POST',
url: 'edit.php',
data: formData,
processData: false,
contentType: false,
success: function(response) {}
});
});
if($_FILES["adv_cover"]["name"]) {}
$id=$_POST['id'];
if($_FILES["adv_cover"]["name"]) {}
然后在PHP中,我得到如下数据:
$("#adv_cover").change(function(e){
e.preventDefault();
var formData = new FormData($('#adv_form_cover')[0]);
$.ajax({
type: 'POST',
url: 'edit.php',
data: formData,
processData: false,
contentType: false,
success: function(response) {}
});
});
if($_FILES["adv_cover"]["name"]) {}
$id=$_POST['id'];
if($_FILES["adv_cover"]["name"]) {}
嗯
但现在,我也需要发送一个ID,根据我在这里发现的一些案例,我是这样做的:
$("#adv_cover").change(function(e){
e.preventDefault();
var formData = new FormData();
formData.append('id', '1300');
formData.append('adv_cover', $('#adv_form_cover')[0]);
$.ajax({
type: 'POST',
url: 'edit.php',
data: formData,
processData: false,
contentType: false,
success: function(response) {}
});
});
然后在PHP中,我尝试获得如下数据:
$("#adv_cover").change(function(e){
e.preventDefault();
var formData = new FormData($('#adv_form_cover')[0]);
$.ajax({
type: 'POST',
url: 'edit.php',
data: formData,
processData: false,
contentType: false,
success: function(response) {}
});
});
if($_FILES["adv_cover"]["name"]) {}
$id=$_POST['id'];
if($_FILES["adv_cover"]["name"]) {}
但我现在什么也没得到
我还尝试了console.log formData['id']和formData['adv_cover'],但没有成功,因此问题似乎至少在javascript方面
请注意,我还尝试了以下两种方法:
formData.append('adv_cover', $('#adv_form_cover')[0]);
及
感谢您的帮助您可以这样传递多个参数
$.ajax({
type: "POST",
url: "edit.php",
data: { id: "ID HERE", adv_cover: "ADV COVER HERE" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
可以这样传递多个参数
$.ajax({
type: "POST",
url: "edit.php",
data: { id: "ID HERE", adv_cover: "ADV COVER HERE" }
})
.done(function( msg ) {
alert( "Data Saved: " + msg );
});
似乎
newformdata()
调用接受HTML表单元素,而.append()
方法不:
追加
值字段的值。可以是Blob、文件或字符串,如果两者都不是,则将值转换为字符串 (摘自) 因此,在使用append方法时,为了发送文件,需要获得对象或文件的名称。我目前没有可供测试的设置,但您可以通过以下方式访问文件对象:
$('#adv_form_cover').get(0).files[0]
或者不使用jQuery:
document.getElementById('adv_form_cover').files[0]
因此,或许可以尝试使用以下版本的附加值:
void追加(DOMString名称,文件值,可选的DOMString文件名)
使现代化 嗯,奇怪。。。是的,这就是我的意思:
formData.append('adv_cover', $('#adv_form_cover').get(0).files[0], 'filename');
尽管要工作,它肯定需要在输入中选择一个文件。如果您记录我的文件,console.log()
会说什么
您可以尝试的另一件事是合并两种方法,基本上您可以使用第一个示例创建表单:
var formData = new FormData($('#adv_form_cover')[0]);
然后附加额外的数据,如下所示:
formData.append('id', '1300');
这可能行得通,摘自本页底部:
似乎
newformdata()
调用接受HTML表单元素,而.append()
方法不:
追加
值字段的值。可以是Blob、文件或字符串,如果两者都不是,则将值转换为字符串 (摘自) 因此,在使用append方法时,为了发送文件,需要获得对象或文件的名称。我目前没有可供测试的设置,但您可以通过以下方式访问文件对象:
$('#adv_form_cover').get(0).files[0]
或者不使用jQuery:
document.getElementById('adv_form_cover').files[0]
因此,或许可以尝试使用以下版本的附加值:
void追加(DOMString名称,文件值,可选的DOMString文件名)
使现代化 嗯,奇怪。。。是的,这就是我的意思:
formData.append('adv_cover', $('#adv_form_cover').get(0).files[0], 'filename');
尽管要工作,它肯定需要在输入中选择一个文件。如果您记录我的文件,console.log()
会说什么
您可以尝试的另一件事是合并两种方法,基本上您可以使用第一个示例创建表单:
var formData = new FormData($('#adv_form_cover')[0]);
然后附加额外的数据,如下所示:
formData.append('id', '1300');
这可能行得通,摘自本页底部:
我不确定是否遵循了最后一部分。所以我这样做:“var myfile=$('#adv#u form_cover').get(0).files[0];”然后是:“formData.append('adv#u cover',myfile);”但是javascript冻结了。请跟我说实话,因为我不是开发人员。我可以管理一个解释及其逻辑,但越是理论性的解释,我就越是迷路。@Baylock~当然可以,没问题:)还有一个问题,你在用什么浏览器进行测试?@Baylock~通过AJAX发送数据在不同的浏览器中总是有一些奇怪的地方,而File/Blob API相对较新。。。但说实话,我只是想确认你没有使用IE8之类的工具;)现代FF、Safari和Chrome,如果您使用此
formData.append(id='1300'),您应该不会有问题。@Baylock~
(这不仅仅是一个输入错误)然后将失败,它需要两个独立的参数,如formData.append('id','1300')代码>。然而,如果这是一个打字错误,你尝试它正确,那么我不知道是什么问题。。。就我个人而言,我只通过AJAX发送过文件数据或post数据,而不是同时发送。作为备用方案,您始终可以将某些信息作为GET的一部分发送,即,edit.php?id=1300
@Baylock~啊,是的,对不起,我在评论中不清楚您可以同时发送这两个信息。。很高兴它成功了!虽然您现在让我开始了解为什么post发送额外数据失败;)如果我发现原因,我会更新我的答案。干杯。我不确定我是否听懂了最后一部分。所以我这样做:“var myfile=$('#adv#u form_cover').get(0).files[0];”然后是:“formData.append('adv#u cover',myfile);”但是javascript冻结了。请跟我说实话,因为我不是开发人员。我可以管理一个解释及其逻辑,但越是理论性的解释,我就越是迷路。@Baylock~当然可以,没问题:)还有一个问题,你在用什么浏览器进行测试?@Baylock~通过AJAX发送数据在不同的浏览器中总是有一些奇怪的地方,而File/Blob API相对较新。。。但说实话,我只是想确认你没有使用IE8之类的工具;)现代FF、Safari和Chrome,如果您使用此formData.append(id='1300'),您应该不会有问题。@Baylock~
(这不仅仅是一个输入错误)然后将失败,它需要两个独立的参数,如formData.append('id','1300')代码>。然而,如果这是一个打字错误,你尝试它正确,那么我不知道是什么问题。。。就我个人而言,我只通过AJAX发送过文件数据或post数据,而不是同时发送。作为备用方案,您始终可以将某些信息作为GET的一部分发送,例如,edit.php?id=1300
@Baylock~啊,是的,对不起,我的c语言不清楚