2015-04-07 77 views
0

我使用表单数据将图像发送到服务器。追加表单数据对象?

//create form data from form 
var formData = new FormData($('#my-form')[0]); 

//append the image 
formData.append('file', myFile); 

//add data from crop plugin 
formData.append('file-data', cropData); 

//POST 
$.ajax({ 
     url: /upload, 
     type: 'POST', 
     dataType: 'json', 
     processData: false, 
     contentType: false, 
     data: formData 
    }) 

当我尝试从作物添加数据插上出现我的问题,它会记录OK:

Object {x: 140, y: 273.49999999999994, width: 520, height: 520, rotate: 0} 

但是在PHP一旦公布它只是转储为没有属性空数组。

我哪里错了?

回答

1
var temp = Object {x: 140, y: 273.49999999999994, width: 520, height: 520, rotate: 0} 

JSON.stringify(temp) 
// that will be ok looks in php in json_decode($_POST['data']) 

$.ajax({ 
    url: '/upload', 
    type: 'POST', 
    dataType: 'json', 
    processData: false, 
    contentType: false, 
    data: JSON.stringify(temp) 
}) 

,并在PHP中:

$data = json_decode($_POST['data']) ; 

这就是答案 - 你要的对象/散列从爵士到JSON转换之前发送到PHP。

+1

'formData'不是一个基本对象。你不能将它串化为JSON。 – Quentin

+0

@Quentin阅读这个问题。 – Legendary

+1

我做到了。 'var formData = new FormData'非常相关。 – Quentin

3

对于FormData对象,不能将简单对象作为第二个参数传递给append。 (好吧,你可以,但它会被串起来,这通常会给你"[object Object]")。

您需要分别添加每条数据。你可以使用PHP的命名约定来获得另一端的数组。

for (var prop in cropData) { 
    if (cropData.hasOwnProperty(prop)) { 
     formData.append('file-data[' + prop + ']', cropData[prop]); 
    } 
} 
+1

@Quentin这是一个很好的解决方案,但我发现其他答案更容易实现。不管怎么说,还是要谢谢你! – panthro