2014-04-14 14 views
8

Mam ten kod używany w zasięgu kątowym usługi: -

var formData = function (data) { 
    var fd = new FormData(); 
    angular.forEach(data, function (value, key) { 
     fd.append(key, value); 
    }); 
    return fd; 
} 

var updateUserPic = function (profilePic, callback, userId) { 
    var userId = userId || FRAME_API.proxyUserId; // jshint ignore:line 
    if (!_.isFunction(callback)) { 
     throw new Error('You must provide a callback function.'); 
    } 
    $http({ 
     method: 'POST', 
     url: '/Learn/PostUserProfile.ashx?action=profilepic&userid=' + userId, 
     data: {up_picfile: profilePic}, 
     transformRequest: formData, 
     headers: { 'Content-Type': undefined} 
    }).success(function (data, status, headers, config){ 
     callback([data, status, headers, config]); 
     return; 
    }).error(function (data, status){ 
     console.log([status,data]); 
     callback(false); 
     return; 
    }); 
}; 

Inspecting pomocą karty sieciowej w Chrome Developer Tools pokazuje, że jest to odpowiedź 200 OK. Również dane przebiegają zgodnie z oczekiwaniami. Problem polega jednak na tym, że wywołanie zwrotne error jest jedynym wywołanym, niezależnie od tego, że ma status 200. Parametry data i status są dostępne jako undefined.

Jaki by to był powód?

Odpowiedź z serwera to:

{status: 'success', path: 'assets/profile/profilepicture.png'} 

Należy również pamiętać, że ta odpowiedź nie może być zmieniony przez mnie. Pochodzi ze skryptu dostawcy działającego na serwerze, do którego nie mam dostępu.

+1

Czy możesz pokazać nam, jakie dane pochodzą z serwera? zobacz go w zakładce sieci w narzędziach programistycznych – karaxuna

+1

Możliwe, że kątowe czeka na sformatowane dane json i zwracasz błędne dane. – karaxuna

+0

@karaxuna Dodano odpowiedź na pytania. – claydiffrient

Odpowiedz

3

Użyłem transformatora zwyczaj reagowania, aby włączyć go do ważnego JSON:

var responseTransformer = function (data) { 

    return data.replace('status', '"status"') 
       .replace('\'success\'', '"success"') 
       .replace('path', '"path"') 
       .replace('\'assets/profile/profilepicture.png\'', 
         '"assets/profile/profilepicture.png"'); 

}; 

ten sprawiło, że to działa dobrze

+0

W moim przypadku brakowało "transformRequest: formData" w moim żądaniu, które go rozwiązało. –

2

zwrócone dane powinny wyglądać następująco:

{ "status": "success", "path": "assets/profile/profilepicture.png" } 

uwaga "musi być zamiast"

+1

Niestety nie mam kontroli nad kodem po stronie serwera, więc nie można zmienić. – claydiffrient

+1

To nie problem – SomeKittens

+0

@ SomeKittensUx2666 masz rację, może wynik, który pokazał, jest już analizowany obiekt – karaxuna

0

W moim przypadku serwer zwrócił "File Not Foun d "string, podczas gdy natywny $ http w Angular oczekiwał odpowiedzi typu" application/json ". Mimo że kod stanu był 200 OK, wprowadzano część .error metody http.

Aby to naprawić, musiałem zwrócić obiekt JSON z serwera.

Powiązane problemy