http post返回奇怪的JSON

24 浏览
0 Comments

http post返回奇怪的JSON

我是AngularJS的新手,为了开始,我想使用AngularJS开发一个新的应用程序。

我试图使用我的Angular应用程序中的$http向服务器端发起AJAX请求。

我尝试了以下方式来发送参数:

$http({
    method: "post",
    url: URL,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    data: $.param({username: $scope.userName, password: $scope.password})
}).success(function(result){
    console.log(result);
});

这个方法可以工作,但是它还同时使用了jQuery中的$.param。为了去除对jQuery的依赖,我尝试了:

data: {username: $scope.userName, password: $scope.password}

但是这似乎失败了。然后我尝试了params

params: {username: $scope.userName, password: $scope.password}

但是这也似乎失败了。然后我尝试了JSON.stringify

data: JSON.stringify({username: $scope.userName, password: $scope.password})

我找到了这些可能是解决方法,但是都没有成功。我是不是做错了什么?我确信AngularJS会提供这个功能,但是怎么用呢?

0
0 Comments

在这篇文章中,我们将讨论一个关于HTTP POST请求返回奇怪JSON的问题,探讨其出现的原因以及解决方法。

问题的出现是因为在发送HTTP POST请求时,可能会出现错误的Content-Type头部。在给出的代码示例中,我们可以看到请求被发送到了登录URL,并且包含了用户名、密码以及授权类型等参数。然而,没有明确指定请求的Content-Type头部。

对于一些服务器来说,如果没有正确指定Content-Type头部,可能会导致请求失败或返回错误的JSON格式。因此,为了解决这个问题,我们需要在发送请求时明确指定Content-Type头部为'application/x-www-form-urlencoded'。

以下是修改后的代码示例:

$http.post(loginUrl, `username=${ encodeURIComponent(username) }` +
                     `&password=${ encodeURIComponent(password) }` +
                     '&grant_type=password',
                     { headers: {'Content-Type': 'application/x-www-form-urlencoded'} }
).success(function (data) {

通过在请求中添加{ headers: {'Content-Type': 'application/x-www-form-urlencoded'} }作为配置参数,我们可以确保请求中包含了正确的Content-Type头部。这样做可以避免出现奇怪的JSON返回值,并且能够成功进行身份验证。

总结起来,解决这个问题的方法是明确指定HTTP POST请求的Content-Type头部为'application/x-www-form-urlencoded'。这可以通过在发送请求时添加{ headers: {'Content-Type': 'application/x-www-form-urlencoded'} }作为配置参数来实现。希望这个解决方案能够帮助到你!

0
0 Comments

在使用AngularJS进行POST请求时,有时会遇到返回奇怪JSON的问题。这个问题的出现原因是因为在发送POST请求时,没有正确地对数据进行URL编码,导致返回的JSON格式不正确。要解决这个问题,可以使用AngularJS提供的两个服务来处理URL编码的过程,分别是$httpParamSerializerJQLike和$httpParamSerializer。前者是受到jQuery的序列化方法param()的启发而开发的,后者则是Angular自身用于处理GET请求的序列化方法。

下面是使用$httpParamSerializerJQLike进行URL编码的示例代码:

$http({
  url: 'some/api/endpoint',
  method: 'POST',
  data: $httpParamSerializerJQLike($scope.appForm.data),
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
}).then(function(response) {
  // 处理返回的数据
});

注意,需要先将对应的服务注入到控制器中。

如果使用$http.post()方法发送POST请求,也可以使用相同的方法对数据进行URL编码,示例代码如下:

$http.post(
  'some/api/endpoint',
  data: $httpParamSerializerJQLike($scope.appForm.data),
  {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }
).then(function(response) {
  // 处理返回的数据
});

需要注意的是,使用$http.post()方法时,参数的传递方式略有不同。

此外,需要注意的是,使用$httpParamSerializerJQLike和$httpParamSerializer进行URL编码时,对于复杂的数据结构,两者的编码格式略有不同。比如,对于数组的编码,$httpParamSerializerJQLike会将数组名作为参数名,并用[]表示多个值,而$httpParamSerializer则直接使用参数名表示多个值。对于对象的编码,$httpParamSerializerJQLike会使用[]表示对象的属性名,而$httpParamSerializer则直接使用JSON格式表示对象。

希望这篇文章能够帮助你理解并解决使用AngularJS发送POST请求时返回奇怪JSON的问题。

0
0 Comments

问题:http post返回奇怪的JSON是如何出现的以及如何解决?

在AngularJS中,$http服务默认会将传出的请求数据序列化为JSON字符串,并且以"application/json"的内容类型进行POST请求。但是,当我们想要将数据作为表单提交时,就需要改变序列化算法,并以"application/x-www-form-urlencoded"的内容类型进行POST请求。

解决方法如下:

$http({
    method: 'POST',
    url: url,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'},
    transformRequest: function(obj) {
        var str = [];
        for(var p in obj)
        str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
        return str.join("&");
    },
    data: {username: $scope.userName, password: $scope.password}
}).then(function () {});

如果需要提交multipart/form-data格式的数据,可以使用angular.element.param(obj)方法进行转换。

需要注意的是,这个问题的解决方法是针对AngularJS 1.4及以上版本的。在1.4版本中,新增了$httpParamSerializer服务,可以更方便地进行URL编码变量。可以通过注入$httpParamSerializerJQLike或$httpParamSerializer来使用这个服务。

然而,有些人在使用AngularJS 1.6.6版本时无法注入$httpParamSerializerJQLike或$httpParamSerializer服务,可能会遇到undefined或$http function的问题。在这种情况下,可以使用上述提到的方法进行解决。

通过将数据转换为URL参数格式,而不是JSON字符串,可以解决http post返回奇怪JSON的问题。同时,也介绍了如何处理multipart/form-data格式的数据以及在不同版本的AngularJS中的差异处理方法。

0