【问题标题】:Why does my AJAX request receive null responseText为什么我的 AJAX 请求收到 null responseText
【发布时间】:2011-12-07 23:41:34
【问题描述】:

我正在使用 Javascript 函数向 Java servlet 发送请求,servlet 写入内容类型设置为“text/plain”的响应。 我已经使用 Firebug 进行了跟踪,并且 request.responseText 始终为空,即使请求以状态 200(OK)完成。 为什么 responseText 为空?

我之前用 Java 客户端尝试过这个,它确实成功收到了响应。

  google.maps.event.addListener(map, 'click', function(event) {
    var request = new XMLHttpRequest();
    request.open("POST", <MY URL>, true);
    request.onreadystatechange = function() {
       if (request.readyState == 4) {
                var resp = request.responseText;
                console.log(resp);
        }
    }

    request.send(null);
  });

更新

按照给出的答案中的建议,我使用了 Chrome,查看 Javascript 控制台发现以下错误

XMLHttpRequest cannot load http://localhost:8080/... Origin null is not allowed by Access-Control-Allow-Origin.

在我的服务器代码中,我使用以下内容在 HTTP 响应中设置了适当的标头

setHeader("Access-Control-Allow-Origin", "*");

瞧 - 响应中按预期返回了 42K 的数据!

【问题讨论】:

  • 我在这里没有看到足够的信息来继续。什么浏览器?发送的响应文本是什么?等等...您可能希望使用 AJAX 抽象。
  • 如果您在 send() 方法的参数中使用实际字符串而不是 null 会怎样?我不认为它必须是任何特别有意义的东西,但也许您的服务器端脚本正在寻找它没有得到的 POST 变量。只是一个想法。
  • 你能展示你的Java代码吗? (此外,您可能应该测试状态以及 readyState。)
  • 尝试在浏览器中将 URL 作为普通 HTTP 请求运行,如果没有得到任何响应,请调试 Java(servlet) 代码
  • 我的 Java 代码实际上是一个 Wicket 组件(不过仍然归结为一个 servlet)。我可以发布代码,但由于它可以与独立的 Java 客户端一起使用,并且在将 URL 粘贴到浏览器时得到有效响应,我认为问题出在我的 Javascript 上。

标签: java javascript ajax servlets


【解决方案1】:

您使用的是哪种浏览器? 尝试使用 chrome 并查看网络和控制台输出。

由于我正在执行 XDR 请求,我也有类似的头痛。在 FF 上似乎一切正常,并返回 200 代码,但使用 chrome,您可以获得更多信息,并且会看到“Access-Control-Allow-Origin”错误。

在您的服务器端尝试设置“Access-Control-Allow-Origin: *”以允许来自任何源页面的请求。

【讨论】:

  • 客户端和服务器都是本地的。但我会尝试用 Chrome 进行测试,看看会发生什么。
  • 看准了!所以又做了一次。谢谢!!
  • XDR 请求有不同的方式,无论是否在同一个本地服务器中。
猜你喜欢
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多