5

是否有对这个 jQuery ajax POST 的 AngularJS 等效调用,使用contentTypeand setRequestHeader

$.ajax({
    url: "http://localhost/songs",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    beforeSend: function (xhr) {
        xhr.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/UpdateListItems");
    },
    success: function(data){
        console.log(data);
    }
});
4

1 回答 1

11

您可能想要使用$http$resource服务。在 $http 文档中,您可以看到设置 HTTP 标头以设置 SOAPAction 的部分,默认内容类型将已设置为 json(尽管您也应该能够覆盖它)。

这可能会让你开始,我有兴趣看到其他答案以获得更好的方式,因为这似乎是有限的。

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

module.config(function ($httpProvider) {
    $httpProvider.defaults.headers.post['SOAPAction'] = 'http://schemas.microsoft.com/sharepoint/soap/UpdateListItems';
});

function myController($http) {
    var data = { 'value1': 1, 'value2': 2 };

    $http.post('/songs', data).success(function (data) {
        console.log(data);
    });
}

基于此线程,我不相信您可以为每个调用设置不同的标头,但看起来$resource 服务可能会发生更改以允许它。

更新:一定在文档中错过了它,但您绝对可以使用每个呼叫设置不同的操作,$http如下所示

var data = { 'value1': 1, 'value2': 2 };

$http.post('/songs', data, {headers: {'SOAPActions': 'http://schemas.microsoft.com/sharepoint/soap/UpdateListItems'}})
    .success(function (data) {
        console.log(data);
    }); 
于 2012-07-24T05:05:07.607 回答