Estoy escribiendo una extensión google-chrome, que necesita realizar solicitudes ajax a un servidor, enviar algunos datos y recibir algunos datos. Mi servidor es Tomcat 6.0, ejecutándose en localhost.ajax de Chrome-Extension proccessed, pero receive responseText = "" and status = 0
Puedo recibir todos los datos del lado del servidor, hacer todo el proceso que necesito y enviar una respuesta a la extensión pero el estado que obtengo en la devolución de llamada es 0 y responseText = "" .
mi suposición es que el problema radica o en el servidor - devolviendo una respuesta a un requerimiento originario de chrome-extension: // ... url, o en la extensión - recibiendo una respuesta de localhost: 8080.
alguna idea? Realmente apreciaría si alguien sabe la respuesta a esto.
que he leído sobre el tema durante un par de horas - he establecido los permisos neccessary por supuesto, y he intentado establecer el tipo de contenido de la respuesta a "text/xml", "text/html" y "text/plain" - no hace diferencia. He intentado usar ajax tanto con XMLHttpRequest como con JQuery, el mismo problema con ambos. he encontrado estas cuestiones, pero no parece que resolver mi problema:
1. http://www.plee.me/blog/2009/08/ajax-with-chrome-empty-responsetext/
2. http://bugs.jquery.com/ticket/7653
aquí es mi código: bg.js (página de fondo)
function saveText(data) {
var requrl = serverUrl + addTextUrl;
var params = json2urlParams(data);
jQuery.ajax({
type : "POST",
url : requrl,
data : params,
success : function (data, textStatus, XMLHttpRequest) {
console.log("Data Saved: " + msg);
}
});
// var xhr = new XMLHttpRequest();
// xhr.open("POST", requrl, true);
// xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
// xhr.onreadystatechange = function (progress) {
// if (xhr.readyState == 4) {
// console.log("Data Saved: " + this.response);
// }
// };
// xhr.send(params);
}
addContentServlet.java: (lado del servidor)
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
ErrorCodes error = addContent(request, response);
response.setContentType("text/plain");
//response.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
//response.setIntHeader("errorCode", error.ordinal());
response.getWriter().write(error.toString());
response.setIntHeader("errorcode", error.ordinal());
if(error == ErrorCodes.SUCCESS){
response.setStatus(error.toHttpErrorCode());
response.flushBuffer();
}
else{
response.sendError(error.toHttpErrorCode(), error.toString());
}
}
EDIT:
me he dado cuenta en la consola de cromo de la página de fondo que por cada ajax que devuelve a la extensión me sale un XMLHttpRequest
no puede cargar http: // localhost: 8080/stp_poc/MyServlet. Origen chrome-extension: // fmmolofppekcdickmdcjflhkbmpdomba no está permitido por Access-Control-Allow-Origin.
Intenté perder bg.js y colocar todo el código en la página principal, en cambio, fue en vano. ¿cómo es que XMLHttpRequest acepta enviar la solicitud, pero no la vuelve a recibir? ¿Tal vez un problema de configuración del servidor? Soy un Novato, así que tal vez me haya perdido algo básico, como un encabezado en la respuesta
EDITAR He inmovilicé finnaly el problema: que no debería haber incluido el número de puerto en mi permiso. Aquí está el permiso equivocada escribí:
"permissions" : [
"http://localhost:8080/"
]
Y aquí está la forma correcta:
"permissions" : [
"http://localhost/"
]
todo parece funciona bien ahora.
¿Qué ocurre si cambia '' msg' a data'? 'msg' parece indefinido. –
Eso es verdad. Además de eso, configuraría un '
' fuera de la extensión solo para asegurarme de que la respuesta sea correcta. – mattsvenChris - tienes razón. Lo he cambiado desde entonces, no es eso. – Eyal