Estoy tratando de hacer un POST HTTP a un servidor.

Los datos que tengo que enviar es un objeto json.

El problema es que $http.post angular sustituir el método con opciones.

Puedo hacer esta config

.config(['$httpProvider', function ($httpProvider) {
  //Reset headers to avoid OPTIONS request (aka preflight)
  $httpProvider.defaults.headers.common = {};
  $httpProvider.defaults.headers.post = {};
  $httpProvider.defaults.headers.put = {};
  $httpProvider.defaults.headers.patch = {};
}])

y los cambios de las opciones para PUBLICAR, pero no puedo configurar el tipo de contenido a «application/json», y me estoy haciendo un «415 Unsupported Media Type»

Gracias

  • ¿Tiene el control del servidor al que se accede? Es posible que no admita un método de OPCIONES de solicitud. No se puede evitar la comprobación previa al uso de CORS a través de $httpProvider.
InformationsquelleAutor agusgambina | 2014-03-13

2 Comentarios

  1. 6

    $http.post angular no reemplace el método con OPCIONES. Parece que usted está tratando de llamar a la api en un dominio diferente que el que su código JS vienen. Esto se llama Cruz de Dominio. Para tales casos, el navegador realiza comprobaciones de solicitud con las OPCIONES para ver el valor devuelto de los encabezados. En su backend respuesta debe agregar el encabezado Access-Control-Allow-Origin: * por ejemplo. Cuando el navegador se ve que el encabezado se realiza la petición POST.

    Más detalles aquí: https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS

    Espero que esto sea de ayuda!

    • gracias, eso es exactamente lo que está sucediendo, pero ya tengo el Access-Control-Allow-Origin: * en el servidor, y me da el mismo error.
    • Abrir en chrome devtools, que la excepción es exactamente lo que puede obtener en la consola?
    • El servidor no permite CORS, así que estoy buscando cuales son las opciones que tengo disponibles, uno de ellos es implementar un proxy para realizar las solicitudes. Gracias por las respuestas @Naor.
    • ¿cómo se puede proporcionar un servidor de respuesta que permite la cruz-dominio ?
    • Estoy Publicando un POST de la ruta configurada en Sinatra que se ejecutan en heroku
    • No sé. Me pueden ayudar con el nodo del express.

  2. 1

    Agregar

    $httpProvider.defaults.headers.post['Content-Type'] = 'application/json';

    Pero tenga en cuenta que esto va a establecer el encabezado de Tipo de Contenido a nivel mundial.

    Si usted necesita para establecer el tipo de contenido por llamada, usted debe utilizar $http.post como

     $http.post("/foo/bar", requestData, {
            headers: { 'Content-Type': 'application/json'},
            transformRequest: transform
        }).success(function(responseData) {
            //do stuff with response
        });
    • gracias por la respuesta. He intentado tanto, ponerlo a nivel mundial y local en la función, pero el mismo resultado, cambiar el método de solicitud para las opciones.
    • No debería tener que hacer esto, el valor predeterminado para $http.post es application/json. Ver /docs/api/ng/servicio/$http para su versión, búsqueda de ‘Configuración de Encabezados HTTP’.
    • esta realidad trabajaba para mí. tenía que usar $http.post(url, data) en lugar de $http({ method: 'POST', data: data })

Dejar respuesta

Please enter your comment!
Please enter your name here