【问题标题】:IsAjaxRequest returns false on AngularJs $http.post with proper headersIsAjaxRequest 在具有正确标头的 AngularJs $http.post 上返回 false
【发布时间】:2015-04-29 07:26:06
【问题描述】:

我正在向 .NET 应用程序发送 AJAX 帖子,但尽管为 Content-Type 和 X-Requested-With 添加了正确的内容标头,但我仍然收到 IsAjaxRequest 返回 false。

配置设置正确的标头和序列化,然后底部的控制器处理 POST。

// Configure httpProvider
validationApp.config(['$httpProvider', function($httpProvider) {
  // .NET AJAX FIX
  $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest';

  // Use x-www-form-urlencoded Content-Type
  $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

  /**
   * The workhorse; converts an object to x-www-form-urlencoded serialization.
   * @param {Object} obj
   * @return {String}
   */
  var param = function(obj) {
    var query = '', name, value, fullSubName, subName, subValue, innerObj, i;

    for(name in obj) {
      value = obj[name];

      if(value instanceof Array) {
        for(i=0; i<value.length; ++i) {
          subValue = value[i];
          fullSubName = name + '[' + i + ']';
          innerObj = {};
          innerObj[fullSubName] = subValue;
          query += param(innerObj) + '&';
        }
      }
      else if(value instanceof Object) {
        for(subName in value) {
          subValue = value[subName];
          fullSubName = name + '[' + subName + ']';
          innerObj = {};
          innerObj[fullSubName] = subValue;
          query += param(innerObj) + '&';
        }
      }
      else if(value !== undefined && value !== null)
        query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
    }

    return query.length ? query.substr(0, query.length - 1) : query;
  };

  // Override $http service's default transformRequest
  $httpProvider.defaults.transformRequest = [function(data) {
    return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
  }];

}]);

// POST
validationApp.controller('validationController', function($scope, $http) {
  $scope.user = {};

  $scope.update = function(user) {
    if ($scope.uForm.$valid) {
      $http.post('//ASPNET/EndPoint', $scope.user)
      .success(function(response) {
      })
      .error(function(response) {
      });
    }
  };
});

如您所见,请求标头已按应有的方式读取。并添加了以下内容。

内容类型:application/x-www-form-urlencoded;charset=UTF-8 X-Requested-With: XMLHttpRequest

据我所知,表单数据应该显示出来,但响应始终是 POST isAjaxRequest 为假。并且没有数据成功 POST。我在这里做错了什么?

【问题讨论】:

标签: .net angularjs


【解决方案1】:

我不是 .NET 人,但您是否在服务器上设置了标头? 像这样:

 [EnableCors(origins: "http://www.contoso.com,http://www.example.com", 
headers: "*", methods: "*")] 

见:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#allowed-origins

【讨论】:

  • 标头已经设置在服务器端。不幸的是,我仍然得到相同的回应。不过还是谢谢。
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
相关资源
最近更新 更多