/ / Publicación con el método angular http.post: xmlhttprquest no puede cargar el servicio: json, google-chrome, firefox, angularjs, xmlhttprequest

Publicación con el método angular http.post - xmlhttprquest no puede cargar el servicio - json, google-chrome, firefox, angularjs, xmlhttprequest

El método Angular $ http.post no publica JSON en el servicio (servicio RESTFul, servicio de nodo). Mostrando el siguiente error:

XMLHttpRequest cannot load /some/service. Invalid HTTP status code 404

Aquí está el código publicado

$http({method:"POST", url:"/some/service/",data:{"key1":"val1","key2":"val2"}}).success(function(result){
alert(result);
});

El mismo código funciona con la versión anterior de mi chrome, es decir, v29... *. Actualicé mi cromo a V30... *. Ahora, no está funcionando. No funciona en Firefox también. ¿Hay algún problema con Chrome y Firefox?

¿Alguien puede ayudar?

Respuestas

2 para la respuesta № 1

Encontré un problema similar después de actualizar Chrome a la versión 30.0.1599.101 y resultó ser un problema del servidor.

Mi servidor se implementa utilizando Express (http://expressjs.com/) y el siguiente código que permite CORS (¿Cómo permitir CORS?) funciona bien:

var express = require("express");
var server = express();

var allowCrossDomain = function(req, res, next) {
res.header("Access-Control-Allow-Origin", req.headers.origin || "*");
res.header("Access-Control-Allow-Methods", "GET,POST,PUT,HEAD,DELETE,OPTIONS");
res.header("Access-Control-Allow-Headers", "content-Type,x-requested-with");
next();
}
server.configure(function () {
server.use(allowCrossDomain);
});

server.options("/*", function(req, res){
res.header("Access-Control-Allow-Origin", req.headers.origin || "*");
res.header("Access-Control-Allow-Methods", "GET,POST,PUT,HEAD,DELETE,OPTIONS");
res.header("Access-Control-Allow-Headers", "content-Type,x-requested-with");
res.send(200);
});

server.post("/some_service", function (req, res) {
res.header("Access-Control-Allow-Origin", req.headers.origin);

// stuff here

//example of a json response
res.contentType("json");
res.send(JSON.stringify({OK: true}));
});

La solicitud HTTP se ve como:

$http({
method: "POST",
url: "http://localhost/some_service",
data: JSON.stringify({
key1: "val1",
key2: "val2"
}),
headers: {
"Content-Type": "application/json; charset=utf-8"
}
}).success(
function (data, status, headers, config) {
//do something
}
).error(
function (data, status, headers, config) {
//do something
}
);

Como se señala aquí (https://stackoverflow.com/a/8572637/772020), la idea es asegurar que su servidor maneje correctamente la solicitud de OPCIONES para habilitar CORS.


0 para la respuesta № 2

Bueno, una nueva actualización de Chrome fue lanzada un parde hace días. Verifique las notas del parche de esa versión si han cambiado algo relacionado con la seguridad. Mi extensión dejó de funcionar tanto en FF como en Chrome hace un par de días.