Ajax из Chrome-Extension обработан, но получает responseText = "" и status = 0 - PullRequest
5 голосов
/ 26 апреля 2011

Я пишу расширение 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.Расширение источника Chrome: // fmmolofppekcdickmdcjflhkbmpdomba не разрешено Access-Control-Allow-Origin.

Я попытался потерять bg.js и вместо этого поместить весь код на главную страницу - безрезультатно.почему XMLHttpRequest соглашается отправить запрос, но не получить его обратно ??Может быть, проблема с настройкой сервера?Я новичок, так что, может быть, я пропустил что-то простое, например, заголовок в ответе


EDIT Я наконец-то исправил проблему: я не должен был включатьномер порта в моем разрешении.Вот неправильное разрешение, которое я написал:

"permissions" : [
    "http://localhost:8080/" 
]

И вот правильная форма:

"permissions" : [
    "http://localhost/" 
]

теперь все работает нормально.

1 Ответ

5 голосов
/ 27 апреля 2011

Проблема заключалась в том, что я не должен был включать номер порта в свое разрешение.

Вот неправильное разрешение, которое я написал:

"permissions" : [
    "http://localhost:8080/"
]

И вот правильная форма:

"permissions" : [
    "http://localhost/"
]
...