2012-07-24 74 views
0

解决方案:我必须放下sumbmit按钮并使用常规按钮。该代码的其余部分起作用。我也放弃了HTML表单。使用formdata将数据发送到PHP使用ajax

我想发送一个图像+一些文本到我的PHP脚本与Ajax使用formdata。 这就是我得到:

$ajax_uploadImage = function (form) 
{ 
    var data = new FormData(); 

    data.append('title', form.find('#title').val()); 
    data.append('comment', form.find('#comment').val()); 
    data.append('image', form.find('#image').prop('files')[0]); 

    $.ajax({ 
     url: '../php/upload_image.php', 
     data: data, 
     type: 'POST', 
     processData: false, 
     contentType: false, 
     success: function (data) { 
      alert('something'); 
     } 
    }); 
} 

在函数参数的形式是一个普通的HTML表单,这里是HTML表单:

<form enctype="multipart/form-data" id="upload_image"> 
    <label for="title">Title:</label> 
     <input type="text" id="title" name="title" /> 
    <br /> 

    <label for="comment">Comment:</label> 
    <input type="text" id="comment" name="comment" /> 
    <br /> 

    <label for="image">Image:</label> 
    <input type="file" id="image" name="image" /> 
    <br /> 

    <input type="submit" value="Upload picture" name="submit"> 
    <hr /> 
</form> 

在成功的警报从未触发,谁能帮助?

编辑:添加PHP,即使它并不做任何事情:

<?php echo 'something'; ?> 

回答

0

现在你存储一个jQuery对象在FormData不能正常工作。改为使用这些元素的值。在文件输入的情况下,你需要使用File对象中的DOM元素的files属性:

data.append('title', form.find('#title').val()); 
data.append('comment', form.find('#comment').val()); 
data.append('image', form.find('#image').prop('files')[0]); 
+0

我加你的变化,但我仍然没有得到结果。我现在尝试成功使用警报,但不会触发。我已经添加了我的PHP,但它没有太多。 – ptf 2012-07-24 23:40:59

0

尝试增加形式的行动,比如:

<form enctype="multipart/form-data" id="upload_image" action="upload_image.php"> 
+0

如果我使用“文件”,我得到一个异常说: 无法读取未定义的属性“0”。 – ptf 2012-07-24 23:40:24

+0

也可以发布upload_image.php文件,示例应该如下所示:'try foreach($ _FILES [“images”“[”error“] as $ key => $ error){if error == UPLOAD_ERR_OK ){ $ name = $ _FILES [“images”] [“name”] [$ key]; move_uploaded_file($ _FILES [“images”“[”tmp_name“] [$ key],”uploads /“。$ _FILES ['images'] ['name'] [$ key]); } }' – 2012-07-24 23:55:41

+0

如果我使用动作属性,站点会将我重定向到action.php,这是我不想要的。它不应该在那里。 此外,PHP文件位于开放帖子的底部,即所有它的atm。如果我只是可以通过$ _FILES对象访问它,我知道我已经工作的其余逻辑。 – ptf 2012-07-24 23:58:40