2017-06-01 38 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