来自Chrome扩展程序的ajax已处理,但收到responseText =""和status = 0

Eya*_*yal 5 apache ajax responsetext google-chrome-extension

我正在编写一个google-chrome扩展程序,它需要向服务器发出ajax请求,发送一些数据并接收一些数据.我的服务器是Tomcat 6.0,在localhost上运行.

我能够在服务器端接收所有数据,执行我需要的所有处理,并将响应发送回扩展,但我在回调中得到的状态是0,而responseText ="".
我的猜测是问题出在服务器上 - 返回对源自chrome-extension:// ... url的请求的响应,或者在扩展中 - 从localhost接收响应:8080.

我当然设置了必要的权限,我尝试将响应的内容类型设置为"text/xml","text/html"和"text/plain" - 它没有任何区别.我已经尝试过使用XMLHttpRequest和JQuery的ajax - 两者都有同样的问题.我发现这些问题,但他们似乎并没有解决我的问题:
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);
Run Code Online (Sandbox Code Playgroud)

}

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());
    }           
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我注意到在后台页面的chrome控制台中,对于返回扩展程序的每个ajax,我得到了一个

XMLHttpRequest无法加载http:// localhost:8080/stp_poc/MyServlet.原始chrome-extension:// fmmolofppekcdickmdcjflhkbmpdomba是Access-Control-Allow-Origin不允许的.

我尝试丢失bg.js并将所有代码放在主页面中 - 无济于事.为什么XMLHttpRequest同意发送请求,但没有收到它?可能是服务器配置问题?我是个新手,所以也许我错过了一些基本的东西,比如回复中的标题


编辑 我最后确定了问题:我不应该在我的许可中包含端口号.这是我写的错误的权限:

"permissions" : [
    "http://localhost:8080/" 
]
Run Code Online (Sandbox Code Playgroud)

这是正确的形式:

"permissions" : [
    "http://localhost/" 
]
Run Code Online (Sandbox Code Playgroud)

现在一切似乎都很好.

Eya*_*yal 5

问题是我不应该在我的许可中包含端口号.

这是我写的错误的权限:

"permissions" : [
    "http://localhost:8080/"
]
Run Code Online (Sandbox Code Playgroud)

这是正确的形式:

"permissions" : [
    "http://localhost/"
]
Run Code Online (Sandbox Code Playgroud)