2015-04-07 75 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