【问题标题】:ajax from Chrome-Extension processed, but receive responseText="" and status=0来自 Chrome 扩展的 ajax 已处理,但收到 responseText="" 和 status=0
【发布时间】:2011-08-12 15:51:27
【问题描述】:

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

我能够在服务器端接收所有数据,执行我需要的所有处理,并将响应发送回扩展程序, 但我在回调中得到的状态是 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 不允许 访问控制允许来源。

我尝试放弃 bg.js 并将所有代码放在主页中 - 无济于事。 为什么 XMLHttpRequest 同意发送请求,但不接收返回? 也许是服务器配置问题?我是新手,所以也许我错过了一些基本的东西,比如响应中的标题


编辑 我终于解决了这个问题: 我不应该在我的许可中包含端口号。这是我写的错误权限:

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

这是正确的形式:

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

现在似乎一切正常。

【问题讨论】:

  • 如果将msg 更改为data 会发生什么? msg 看起来未定义。
  • 确实如此。最重要的是,我会在扩展程序之外设置一个<form/>,以确保您得到的响应正常。
  • 克里斯——你是对的。从那以后我已经改变了它,不是它。
  • NeXXeus - 你能解释一下吗?如何在此处使用
  • 你的manifest.json 是什么样的?你有http://localhost的权限吗?

标签: ajax apache google-chrome-extension responsetext


【解决方案1】:

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

这是我写的错误权限:

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

这是正确的形式:

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

【讨论】:

    猜你喜欢
    • 2013-10-24
    • 2014-12-17
    • 2011-10-24
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 2012-11-17
    • 2020-11-26
    相关资源
    最近更新 更多