2017-06-01 109 views
-1

在这里,我写了简单的代码数据保存到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; 
    } 
+0

您的服务器不接受JSON作为'application/x-www-form-urlencoded'。它可以接受JSON作为'application/json',但从这里不可能知道 – Phil

+1

FYI:'$ httpParamSerializerJQLike'产生一个'application/x-www-form-urlencoded'格式的字符串。 'JSON.stringify'生成'application/json'格式的字符串 – Phil

+0

@phill可以将我的上述数据放到Json.stringify(somedata)中,因为我使用它作为字符串化它不是绑定 – Hussain

回答

1

你问

什么是$ 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序列化请求负载。

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

+0

即使我使用头文件:{cotent-type':'application/json'} data:json.string(somedata)其失败 – Hussain

+0

*“如果您的服务器未设置为处理**格式的请求,操作显然会失败。“* – Phil