$ httpParamSerializerJQLike和json.stringify之间的区别是什么

时间:2017-06-01 05:52:56

标签: angularjs json

这里我编写了简单的代码,用于将数据保存到api,当我用户data: $httpParamSerializerJQLike(savingdata)将数据绑定到服务器端但是当我使用data: JSON.stringify(savingdata)时它在服务器端没有绑定是什么原因

 this.saveEmp = function (savingdata) {
        var sersave = $http({
            url: Privateurl2 + 'SaveEmpData',
            method: "POST",
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/x-www-form-urlencoded ;charset=utf-8'
            },

          //  data: $httpParamSerializerJQLike(savingdata),
            data: JSON.stringify(savingdata),


        })
        return sersave;
    }

1 个答案:

答案 0 :(得分:2)

你问

  

$ httpParamSerializerJQLike和json.stringify

之间的区别是什么

答案很简单。前者以 form-url-encoded 格式生成字符串,后者 JSON 。为了说明......

const savingdata = {
  foo: 'abc',
  bar: 123,
  baz: ['A', 'B']
}

$httpParamSerializerJQLike(savingdata)
// <- foo=abc&bar=123&baz%5B%5D=A&baz%5B%5D=B

JSON.stringify(savingdata)
// <- {"foo":"abc","bar":123,"baz":["A","B"]}

至于为什么一个人在服务器上工作而另一个人没有;您正在将请求Content-type设置为application/x-www-form-urlencoded。如果您尝试发送JSON格式的请求正文,则服务器将无法对其进行解码,因为它与您指定的格式不匹配。

您的服务器可能能够处理JSON请求有效负载(如果已经编码/配置为这样做),在这种情况下您只需使用AngularJS默认值并使用

return $http.post(Privateurl2 + 'SaveEmpData', savingdata)

这会将Content-type设置为application/json,并使用JSON.stringify来序列化请求的有效负载。

如果您的服务器未设置为以此格式处理请求,则操作显然会失败。

相关问题