Php Ajax:将formData与自定义变量一起发送

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

我正在尝试用ajax上传图片

如果我喜欢这样做,这会起作用:

    $("#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语言不清楚