【问题标题】:ajax problem - 200 OK in firebug but red message with no response bodyajax 问题 - firebug 中的 200 OK 但没有响应正文的红色消息
【发布时间】:2011-01-14 05:25:05
【问题描述】:

我看到了与跨域相关的小 ajax 问题。

在本地机器上,我使用一些 ajax 创建了 html 示例: 在注册文本字段中,用户键入“用户名”, 在每次击键时,ajax 将其发送到 本地 Tomcat,servlet 检查该用户名是否已被使用 并发送“采取”回复。

在本地主机上完全没有问题。 一旦我输入使用的“用户名”,servlet 就会发送“采取”响应 和浏览器显示它。

但是,当我使用 ajax 放置测试 html 页面时 在远程机器上(远程网络上的一些免费托管) 在我的本地主机 Tomcat 上发送验证请求, 建立连接, 在 Tomcat 控制台中,我看到了请求, 在 Mozzila 的萤火虫中,这是控制台输出:

GET http://89.216.182.25:8080/Dinamicki1/UsernameServlet?username=zik 200 OK

...但在响应选项卡中 没有 servlet 响应“采取” firebug 中的消息是红色的

所以服务器通信良好,没有防火墙问题,回复是200 OK
但是响应正文是空的。

知道萤火虫中的红色消息是什么吗?

非常感谢您。

如果有人可以推荐一些严肃的 java ajax 教程 将不胜感激:)

【问题讨论】:

    标签: java ajax firebug cross-domain


    【解决方案1】:

    您需要在您的 Ajax 请求中使用与域相关的 URL:

    /Dinamicki1/UsernameServlet?username=zik

    或上下文相关的 URL(假设页面是从 /Dinamicki1 提供的):

    UsernameServlet?username=zik

    关于“Java 的 Ajax 教程”,从这里开始:How to use Servlets and Ajax?

    【讨论】:

    • @BalusC 我想如果带有 ajax 的 html 驻留在该免费托管域上并且从 ajax 调用的 servlet 仍在我的本地计算机上,那么使用域相对 URL 对我没有帮助?所以我要么使用这个代理解决方案,要么将我的 servlett 移动到 html 和 ajax 所在的同一台机器上?
    • 您不能触发跨域 Ajax 请求。当然,ajax 源和目标都应该在同一个域中。与域相关的 URL 是确保这一点并发现潜在错误的最简单方法。使用java.net.URLConnection 的代理servlet 确实可以解决您的问题。最好还是将所有主机都托管在同一台机器上。
    【解决方案2】:

    对我来说,这是 web api(c# .NET) 请求,但未启用 cors。 在控制器上添加了 cors 的标头,它解决了问题。

    [EnableCors(origins: "*", headers: "*", methods: "*")]
    

    【讨论】:

      【解决方案3】:

      对我有用的解决方案是我必须在网址中添加“www”!我正在使用 URL Rewrite,所以我拥有的每个 URL(图像、js、get、load、post)都需要使用完整的 url,但它缺少“www”!

      【讨论】:

        【解决方案4】:

        我从this site找到了解决方法:

        1. “要允许通过 Apache Tomcat 浏览目录,请将文件 conf/web.xml 中的参数“listings”从 false 更改为 true。”

        2. 不要将您的页面称为C:/Documents and Settings/.../page.html,而是将其称为localhost:8080/your_servlet_name(页面最好命名为index.html)。

        这样,您将能够向localhost:8080/your_servlet_name/something_else 发出 AJAX 请求。

        【讨论】:

          【解决方案5】:

          Firebug报的200状态不代表跨域ajax调用的有效性,不管成功与否。

          您可能想尝试使用代理方法来执行调用。

          例如JavaScript: Use a Web Proxy for Cross-Domain XMLHttpRequest Calls

          【讨论】:

            【解决方案6】:

            您不能使用 AJAX 读取来自其他域的回复。

            您的 HTML 必须与 AJAX servlet 位于相同的服务器(以及相同的域、端口和协议)上。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-02-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-04-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多