Angular $ http在200响应上调用错误

时间:2014-04-14 18:32:37

标签: javascript angularjs

我在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. datastatus参数都是undefined{status: 'success', path: 'assets/profile/profilepicture.png'} 参数。 1}}。

出现这种情况的原因是什么?

服务器的响应如下:

{{1}}

另请注意,我无法更改此回复。它来自在服务器上运行的供应商脚本,我无法访问。

3 个答案:

答案 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对象。