2017-04-03 87 views
-1

我想做一个包含图片的AJAX请求。只有图像是一种形式,并且只需要成为图像。Ajax请求图像

var form = $('form')[0]; // You need to use standard javascript object here 
var formData = new FormData(form); 

var data = { 
    id: id, 
    title:title, 
    photo:formdata 
}; 

$.ajax({ 
    type: 'POST', 
    enctype: 'multipart/form-data', 
    url: '/my-url', 
    data: JSON.stringify(data), 
    processData: false, 
    cache: false, 
    contentType: false, 
    success: function(response){ 
    console.log(response); 
    }, 
    error: function(data){ 
    console.log("error"); 
    console.log(data); 
    } 
}) 

我越来越id和冠军.val();,我想保持这种..,它的正常工作中的id和标题,但我不知道如何使工作发送图像数据库。

+0

所以你想让别人为你编写服务器端部分? –

+0

@RoryMcCrossan noo ..我只是想知道为什么它没有通过的图像..我正在看'请求有效载荷'并且照片是空的。 – Hateres1990

+0

向我们展示PHP代码。我敢打赌,你的问题将会是'formdata'部分。这是整个“形式”。 – vaso123

回答

0

你的问题是因为你试图追加二进制FormData到一个对象,然后序列化。

相反,您需要将附加数据添加到FormData对象,以便它们都可以用相同的方式进行编码。试试这个:

var form = $('form')[0]; 
var formData = new FormData(form); 

formData.append('title', title); 
formData.append('id', id); 

$.ajax({ 
    type: 'POST', 
    enctype: 'multipart/form-data', 
    url: '/my-url', 
    data: formData, 
    processData: false, 
    cache: false, 
    contentType: false, 
    success: function(response) { 
    console.log(response); 
    }, 
    error: function(data){ 
    console.log("error"); 
    console.log(data); 
    } 
}) 

注意,如果idtitle值从input元素form内恢复,那么你甚至都不需要append()线,因为他们将被自动包含在FormData为您提供form给构造函数。

此外请确保您在form元素的submit事件下运行此代码并呼叫preventDefault。不要把它放在点击submit按钮之下。