【问题标题】:ajax not getting servlet response 200 Okajax 没有得到 servlet 响应 200 好的
【发布时间】:2013-04-19 07:12:14
【问题描述】:

我必须对 servlet 进行 ajax 调用并在 html 中更新页面的一部分。这是我的代码。

<html>
<head>
<script type="text/javascript">

function waitForStatus() {
              alert("link clicked");
              var xmlhttp;
              if (window.XMLHttpRequest)  {
                xmlhttp=new XMLHttpRequest();
                }
              else {
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }


               xmlhttp.onreadystatechange = function () {
                    if (xmlhttp.readyState==4 && xmlhttp.status == 200) {
                       alert("Received response text :::: "+ xmlhttp.responseText);
                       document.getElementById("response").innerHTML=xmlhttp.responseText;
                    }
                };
                xmlhttp.open("GET","test",true);
                xmlhttp.send(null);
           return true;
        }
</script>
</head>
<body>
<a href="TestWS.jnlp" onclick="waitForStatus()" >Download webstart & wait for status</a>
<p id="response"></p>
</body>
</html>

And my servlet is as follows:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        for(int i = 0; i < 5; i ++) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("Slept :: "+ i);
        }
        System.out.println("Sending response now");
        response.setContentType("text/plain");
        response.setStatus(HttpServletResponse.SC_OK);
        PrintWriter out = response.getWriter();
        response.setHeader("Access-Control-Allow-Origin", "*");
        out.write("hello second servlet");
        out.close();

    }

我可以在服务器日志中看到 servlet 正在发送 200OK。但是 ajax onreadystatechange 没有得到 xmlhttp.status == 200 并且它没有更新我的字段。我也准备好了状态 = 4。在萤火虫中,它没有显示收到 200 OK。我不知道我做错了什么。有人可以帮忙吗?此代码在 IE 上完美运行。但是在Firefox上,它根本不起作用。我正在从服务器加载 HTML。 "http://localhost:8080/myproject/index.html""http://localhost:8080/myproject/test" 在 IE 和浏览器上都可以正常工作。只有当我从 ajax 调用时它才不起作用。

Regards,
Triveni

【问题讨论】:

  • 通过放入console.log检查xmlhttp对象
  • onreadystatechange 回调的if条件前添加console.log(xmlhttp.status)
  • @ArunPJohny 状态始终为 0

标签: html ajax servlets


【解决方案1】:

嘿,只需使用 href="#" 删除 href="TestWS.jnlp" 然后尝试。它将发送响应。

【讨论】:

  • 是的。我试过了。它有效。但是,我希望在单击链接时执行两个操作。一种是下载网络启动工具,另一种是等待服务器响应。由于响应可能会晚一点,我希望它是ajax。难道就不能这样吗?
  • 如果你想同时得到这两个东西,把TestWS.jnlp页面的代码写到测试页面它会发送响应直到下载没有完成。
  • 下载时您可以使用 xmlhttp.readyState==3 检查响应的状态。
  • TestWS.jnlp 是我想下载到用户系统的网络启动文件。它将检查用户系统上的某些状态并将其发布到服务器。同时,我的 ajax 请求将被触发,它将等待来自 webstart 工具的状态在服务器上接收。一旦工具发布响应,服务器发送 200 OK 并且应该调用 ajax onreadystatechange。但它不能以这种方式工作
猜你喜欢
  • 1970-01-01
  • 2013-09-05
  • 2014-04-10
  • 2012-04-25
  • 2018-06-18
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多