2013-11-08 3 views
1

У меня есть форма, в которой есть файлы, поэтому я использую XMLHttpRequest для обработки отправки данных.Как создать объект формы формы XMLHttpRequest FormData

То, что я пытаюсь сделать, - это возможность отправлять объекты, которые будут разбираться с помощью jackson на стороне сервера. как и с json.

Например:

{ 
"number": 123, 
"string": "Hello World", 
"object": { 
    "a": "b" 
} 

}

Так я хочу, чтобы создать "объект". от того, что я знаю, я могу только «число» и «строка» с

formData.append("string", "Hello World"); 

Может быть, есть способ отформатировать его?

, когда я просто добавить некоторые JSON отформатированный объект я получаю это в результате:

var oData = new FormData(document.forms.namedItem("upload-form")); 
    element= {}; 
    element.id = 2; 
    element.type = "dfsdf"; 
    element.url = "sdfsdff"; 
    element.version = "asdasd"; 
    arrayOfelement[0] = framework; 
    oData.append("file", this.myfile.getFile()); 
    oData.append("frameworks",JSON.stringify(arrayOfelement)) 
    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', 'design', true); 
    xhr.onload = function(e) { 
     console.log("upload finished"); 
     }; 
    console.debug("sending form data", oData); 
    xhr.send(oData); 




------WebKitFormBoundaryVWNBucDMZSIlUcXY 

Content-Disposition: форм-данных; Name = "arrayOfElements" { "0": { "ID": 2, "типа": "dfsdf", "URL": "sdfsdff", "версия": "Asdasd"}}

, который явно не анализируется ни на чем на стороне сервера.

+1

Ваш 'WebKitFormBoundary' пример не совсем соответствует вашей JavaScript , но предполагая, что строка JSON делает ее серверной стороной примерно в той форме, которую вы описали, каким образом она явно «не будет анализироваться ни на чем на стороне сервера»? Вы отметили этот вопрос как Джексон, поэтому я предполагаю, что ваша серверная сторона - это Java. Вы пытаетесь выяснить, как разбирать данные POST и JSON анализировать строку POST с помощью Jackson? –

ответ

1

Чтобы отправить объект Javascript с помощью формы данных с XMLHttpRequest, вам необходимо JSON stringify его:

var obj = { 
    "number": 123, 
    "string": "Hello World", 
    "object": { 
     "a": "b" 
    } 
} 
formData.append(JSON.stringify(obj)); 

Подробнее здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

+0

см. Вопрос о том, почему это не работает – Gleeb

Смежные вопросы