2014-04-14 15 views
8

tôi có mã này được sử dụng trong một dịch vụ kiễu góc: -

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

Kiểm tra bằng cách sử dụng tab Mạng trong Công cụ nhà phát triển Chrome cho thấy rằng có một phản ứng 200 OK. Ngoài ra dữ liệu đi qua như mong đợi. Tuy nhiên, vấn đề là cuộc gọi lại error là người duy nhất được gọi là bất kể thực tế là nó có trạng thái là 200. Ngoài ra, các tham số datastatusundefined.

Bất kỳ lý do nào trong trường hợp này?

Câu trả lời từ máy chủ là thế này:

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

Ngoài ra, lưu ý rằng phản ứng này không thể thay đổi bởi tôi. Nó đến từ kịch bản của nhà cung cấp đang chạy trên máy chủ mà tôi không thể truy cập.

+1

Bạn có thể cho chúng tôi biết dữ liệu nào đến từ máy chủ không? nhìn thấy nó trong tab mạng trong các công cụ phát triển – karaxuna

+1

có thể là góc chờ đợi cho dữ liệu định dạng json và bạn đang trả về dữ liệu sai – karaxuna

+0

@karaxuna Đã thêm câu trả lời cho các câu hỏi. – claydiffrient

Trả lời

3

tôi đã sử dụng một máy biến áp đáp ứng tùy chỉnh để biến nó để JSON hợp lệ:

var responseTransformer = function (data) { 

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

}; 

này làm cho nó hoạt động tốt.

+0

Trong trường hợp của tôi, 'transformRequest: formData,' bị thiếu trong yêu cầu của tôi, đã giải quyết nó. –

2

trở dữ liệu sẽ trông như thế này:

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

lưu ý "phải thay vì '

+1

Rất tiếc, tôi không có quyền kiểm soát mã phía máy chủ do đó không thể thay đổi. – claydiffrient

+1

Đó không phải là vấn đề – SomeKittens

+0

@ SomeKittensUx2666 bạn nói đúng, có thể kết quả mà anh ấy cho là đã được phân tích đối tượng – karaxuna

0

Trong trường hợp của tôi, máy chủ đã trả lại "Tệp không phải danh từ d "chuỗi, trong khi $ http gốc trong Angular đã mong đợi một phản ứng của kiểu" application/json ". Vì vậy, mặc dù mã trạng thái là 200 OK, nó đã nhập phần .error của phương thức http.

Để khắc phục điều này, tôi phải trả về một đối tượng JSON từ máy chủ.

Các vấn đề liên quan