Ajax из Chrome-Extension обработан, но получает responseText="" и status=0
Я пишу расширение google-chrome, которое должно отправлять запросы ajax на сервер, отправлять некоторые данные и получать некоторые обратно. Мой сервер - Tomcat 6.0, работающий на локальном хосте.
Я могу получить все данные на стороне сервера, выполнить всю необходимую мне обработку и отправить ответ обратно на добавочный номер, но статус, который я получаю в обратном вызове, равен 0, а responseText="".
я предполагаю, что проблема заключается либо в сервере - возвращающем ответ на запрос, исходящий из chrome-extension: //... url, либо в расширении - получающем ответ от localhost:8080.
Разумеется, я установил необходимые разрешения и попытался задать тип содержимого ответа "text/xml", "text/html" и "text/plain" - это не имеет значения. Я пытался использовать ajax как с XMLHttpRequest, так и с JQuery - та же проблема с обоими. Я нашел эти проблемы, но они, похоже, не решают мою проблему:
1. http://www.plee.me/blog/2009/08/ajax-with-chrome-empty-responsetext/
2. http://bugs.jquery.com/ticket/7653
вот мой код: bg.js (фоновая страница)
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: (на стороне сервера)
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());
}
}
РЕДАКТИРОВАТЬ:
Я заметил в консоли chrome фоновой страницы, что для каждого ajax, который возвращается к расширению, я получаю
XMLHttpRequest не может загрузить http:// localhost:8080/stp_poc/MyServlet. Расширение источника хрома://fmmolofppekcdickmdcjflhkbmpdomba не разрешено Access-Control-Allow-Origin.
Я попытался потерять bg.js и поместить весь код на главную страницу, но безрезультатно. почему XMLHttpRequest соглашается отправить запрос, но не получить его обратно?? Может быть, проблема с настройкой сервера? Я новичок, так что, может быть, я пропустил что-то основное, как заголовок в ответе
РЕДАКТИРОВАТЬ Я наконец-то исправил проблему: я не должен был включать номер порта в свое разрешение. Вот неправильное разрешение, которое я написал:
"permissions" : [
"http://localhost:8080/"
]
И вот правильная форма:
"permissions" : [
"http://localhost/"
]
Кажется, теперь все работает нормально.
1 ответ
Проблема заключалась в том, что я не должен был включать номер порта в свое разрешение.
Вот неправильное разрешение, которое я написал:
"permissions" : [
"http://localhost:8080/"
]
И вот правильная форма:
"permissions" : [
"http://localhost/"
]