Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Angular Resource + formData = method: PUT = pusty obiekt
Forum PHP.pl > Forum > Przedszkole
wujek2009
Hej,

Problem polega na tym, że gdy wykonuje request do serwera z nagłówkiem PUT to w parametrach wysyłany jest pusty obiekt z formData. Jestem pewien, że formData nie jest pusty, ponieważ filtrując go metodą serialize zwraca mi parametry. Ogólnie formularz przekazuje informacje o pliku (tj: jest tam upload) - stąd taka metoda przekazywania danych. Więc teraz trochę kodu:

[JAVASCRIPT] pobierz, plaintext
  1. var form = angular.element('#form-upload'),
  2. formData = new FormData(form.get(0));
  3.  
  4. $resource('link', {}, {
  5. update: {
  6. method: 'PUT',
  7. params: formData,
  8. transformRequest: angular.identity,
  9. headers: {
  10. 'Content-Type': undefined
  11. }
  12. }
  13. }).update(function(response) {
  14. console.log('aa');
  15. });
[JAVASCRIPT] pobierz, plaintext


Najdziwniejsze jest to, że gdy w/w kod zmienię na ten co stosuje w przypadku tworzenia (metod: POST) to wszystko działa:
[JAVASCRIPT] pobierz, plaintext
  1. var form = angular.element('#form-upload'),
  2. formData = new FormData(form.get(0));
  3.  
  4. $resource('link do tworzenia', {}, {
  5. save: {
  6. method: 'POST',
  7. transformRequest: angular.identity,
  8. headers: {
  9. 'Content-Type': undefined
  10. }
  11. }
  12. }).save(formData, function(response) {
  13. // udało się
  14. }, function(response) {
  15. // error
  16. });
[JAVASCRIPT] pobierz, plaintext


Próbowałem zmodyfikować w/w kod i zmienić tylko nagłówek na PUT i resztę zostawić (tj: metodę "save", itd.) - jednak to także nie pomogło i zwracany jest pusty obiekt.
W konsoli jak idzie request to widzę, że PUT NIC nie przekazuje, więc to nie wina frameworka (backendu).

Podejrzewam, że źle wykorzystuje PUT - ma ktoś jakieś pomysły jak do tego podejść?
Comandeer
PUT nie obsługuje parametrów - w nim dane muszą iść wewnątrz ciała żądania. Zatem powinno to raczej wyglądać jak Twój przykład z POST - z tym, że zamiast POST podstaw PUT.
wujek2009
Powiem, że zmieniłem (dla requesta PUT)
[JAVASCRIPT] pobierz, plaintext
  1. params: formData,
  2.  
  3. // na:
  4.  
  5. params: {
  6. imie: 'john'
  7. },
  8.  
[JAVASCRIPT] pobierz, plaintext


i normalnie otrzymuje dane.. czyli jakby angular resource (PUT/update) nie potrafił obsłużyć formData
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.