我在Angular服务中使用此代码: -
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;
});
};
使用Chrome开发人员工具中的“网络”标签检查表明存在200 OK
响应。数据也按预期进行。但是,问题是error
回调是唯一一个被调用的回调,而不管它的状态是200. data
和status
参数都是undefined
和{status: 'success', path: 'assets/profile/profilepicture.png'}
参数。 1}}。
出现这种情况的原因是什么?
服务器的响应如下:
{{1}}
另请注意,我无法更改此回复。它来自在服务器上运行的供应商脚本,我无法访问。
答案 0 :(得分:3)
我使用自定义响应转换器将其转换为有效的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"');
};
这使它工作得很好。
答案 1 :(得分:2)
返回的数据应如下所示:
{ "status": "success", "path": "assets/profile/profilepicture.png" }
注意“必须代替'
答案 2 :(得分:0)
就我而言,服务器正在返回"未找到文件"字符串,而Angular中的原生$ http期望响应类型" application / json"。所以即使状态代码是200 OK,它也进入了http方法的.error部分。
要解决此问题,我必须从服务器返回一个JSON对象。