2013-12-04 5 views
0

По какой-то причине я не могу получить [object Object] из формы. Я использую метод HTE здесь: http://badwing.com/multipart-form-data-ajax-uploads-with-angularjs/#comment-431

JSON я шлю довольно сложный (пример):

{ 
    "challenge_id": 262, 
    "priority": "0", 
    "cause_id": "29", 
    "timestamp": "2013-11-29 12:06:01", 
    "translations": { 
     "en": { 
      "name": "asdfgsfd", 
      "description": "sdfghfs" 
     } 
    }, 
    "actions": { 
     "1": { 
      "type": "chek", 
      "step": "1", 
      "translations": { 
       "en": { 
        "description": "adsfas" 
       } 
      } 
     }, 
     "2": { 
      "type": "chek", 
      "step": "2", 
      "translations": { 
       "en": { 
        "description": "fsdgsd" 
       } 
      } 
     } 
    } 
} 

Мой ответ выглядит следующим образом:

Content-Disposition: form-data; name="challenge_json"

[object Object]

Мой запрос выглядит так:

 return $http.post(REQUEST_URL + '/ENDPOINT', {challenge_json:data}, { 
     transformRequest: function(data) { 
      console.log(data); 
      var fd = new FormData(); 
      angular.forEach(data, function(value, key) { 
       fd.append(key, value); 
      }); 
      console.log(fd); 
      return fd; 
     } 

Im изменение заголовков с изменением конфигурации httpProvider. Но попытались сделать это в очереди, и я получаю тот же результат. любая помощь будет оценена.

+0

Этот вопрос очень помог мне, заставив его работать. Однако я не понимаю, почему есть опция данных ... http://stackoverflow.com/questions/18967307/jquery-ajax-request-works-same-angularjs-ajax-request-doesnt – flashpunk

ответ

0

Похоже, вы были близки к решению, но нужно было отключить заголовок «content-type» в параметрах, переданных в $ http, так что объект xmlhttprequest может автоматически добавлять его, когда он получает formdata в методе отправки ,

https://groups.google.com/d/topic/angular/MBf8qvBpuVE/discussion

см детская площадка здесь, http://jsfiddle.net/Lv1n55db/1/

(предоставление FormData объекта непосредственно и не оп не преобразуете или ваш способ обеспечить нормальный объект данных и преобразование его в FormData в transformRequest нет существенной разницы , ключ в опции заголовков)

headers:{'Content-Type':undefined}, 

Он может меняться в зависимости от браузеров и различно различным angularjs версии тоже. Более конкретный и стабильный подход, по крайней мере, если вам не нужны поля для файлов и т. Д., Может быть не использовать собственные FormData, а реализовать сериализацию для ввода строки, как это делают FormFlata.