附加表单数据对象?

时间:2015-04-07 10:28:55

标签: javascript php jquery ajax

我正在使用表单数据将图像发送到服务器。

//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
    })

当我尝试从裁剪插件中添加数据时出现问题,它记录正​​常:

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

但是一旦在PHP中发布,它就会转储为没有属性的空数组。

我哪里错了?

2 个答案:

答案 0 :(得分:3)

您不能将普通对象作为append对象上FormData的第二个参数传递给"[object Object]"。 (嗯,你可以,但它会被字符串化,通常会给你for (var prop in cropData) { if (cropData.hasOwnProperty(prop)) { formData.append('file-data[' + prop + ']', cropData[prop]); } } )。

您需要单独添加每个数据。您可以使用PHP的命名约定来获取另一端的数组。

{{1}}

答案 1 :(得分: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'] ) ;

答案是 - 你必须在发送到php之前将对象/哈希从js转换为json。