2012-07-24 15 views
5

¿Hay una llamada equivalente a AngularJS a este jQuery ajax POST, con contentType y setRequestHeader?Reescribir la llamada jQuery Ajax en AngularJS

$.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); 
    } 
}); 

Respuesta

11

es probable que desee utilizar el servicio $http o $resource. En el documento $ http, puede ver la sección en Configurando encabezados HTTP para establecer SOAPAction y el tipo de contenido predeterminado ya estará configurado en json (aunque también debe poder anularlo).

Esto podría comenzar y me gustaría ver otras respuestas de una mejor manera porque esto parece limitado.

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); 
    }); 
} 

Basado en this thread No creo que se pueden establecer las cabeceras de forma diferente para cada llamada, pero parece que un change podría estar llegando al servicio de recursos $ que le permita.

Actualización: debe de haber perdido en la documentación, pero definitivamente puede establecer diferentes acciones por llamada usando $http por this post así:

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); 
    }); 
Cuestiones relacionadas