2017-03-16 40 views
0

之間的區別,我有以下代碼:

$http({ 
       url: config.apiUrl + 'mail/Sendmail', 
        method: 'POST', 
        data: JSON.stringify({ 
         Body: $scope.Message, 
         Email: $scope.Email, 
         Name: $scope.Name 
        }), 
        headers: { 
         'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' 
        } 
       }) 

它返回

{"Body":"test","Email":"test","Name":"test"}:"" 

這似乎並沒有因爲工作: 「」最後,否則它看起來就像我的郵遞員電話。

當我改變我的數據代碼:

data: $.param({ 
         Body: $scope.Message, 
         Email: $scope.Email, 
         Name: $scope.Name 
        }), 

我得到下參數表格數據,我再也看不到JSON在我的網絡選項卡,但它針對的偉大工程:

public bool SendEmail(EmailRequest email) 

爲什麼JSON.Stringify附加:""到我的電話?

+0

它不:http://jsfiddle.net/ngkjzwm7/ – lin

+0

因爲您的服務器不解析JSON作爲JSON。相反,它將它看作是參數。 –

+0

@KevinB你贊成這個問題和答案嗎?如果是這樣,請解釋原因。 – lin

回答

0

試試像這樣demo fiddle並使用'Content-Type': 'application/json'JSON.stringify()正常工作,它的重要內容類型。

var myApp = angular.module('myApp',[]); 

myApp.controller('MyCtrl', function ($scope, $http) { 
    $scope.output = JSON.stringify({ 
     Body: 'some', 
     Email: '[email protected]', 
     Name: 'name' 
    }); 

    $http({ 
     url: 'https://jsonplaceholder.typicode.com/posts', 
     method: 'POST', 
     data: $scope.output, 
     headers: { 
     'Content-Type': 'application/json' 
     } 
    }) 
}); 

如果你仍然想送它作爲application/x-www-form-urlencoded; charset=UTF-試試這個runnable fiddle。您需要將您的數據作爲一個URL編碼的字符串:

$http({ 
     url: 'https://jsonplaceholder.typicode.com/posts', 
     method: 'POST', 
     data: { 
     Body: 'some', 
     Email: '[email protected]', 
     Name: 'name' 
     }, 
     transformRequest: function(obj) { 
      var str = []; 
      for(var p in obj) 
      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
      return str.join("&"); 
     }, 
     headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
     } 
    }) 
+0

不是downvoter,但該application/x頭是CORS特定的。爲什麼我需要在我的SOA應用程序中使用CORS,但這是一個單獨的問題。不幸的是,它看起來像我只能有1種內容類型。就手動格式化JSON字符串而言,$ .params在這一點上更容易使用。 – RandomUs1r

+0

這個問題被禁止=) – lin

相關問題