使用jquery从servlet检索数据

时间:2014-10-24 11:04:17

标签: jquery servlets

我想使用servlet使用jscript和jquery get将数据返回到html页面。它不起作用,我不明白为什么。我正在使用tomcat 7.056,servlet-api-2.5和jquery-1.11.1.min.js

问题在于以下行代码:

 $.get('htp://.../ServletTeste2', function(responseText) {

Servlet代码

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ServletTeste2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String text = "example text";
    response.setContentType("text/plain"); 
    response.setCharacterEncoding("UTF-8"); 
    response.getWriter().write(text);       
  }
}

Html代码

<html lang="en">

<head>
  <title>SO question 4112686</title>
  <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
  <script>
    $(document).ready(function() {
      $('#somebutton').click(function() {
        $('#somediv').text("hello....");
        //document.location.href = "http://localhost:8080/ServletTeste2";

        $.get('http://localhost:8080/ServletTeste2', function(responseText) {
          $('#somediv').text("hello....");
          $('#somediv').text(responseText);
        });
      });
    });
  </script>
</head>

<body>
  <button id="somebutton">press here</button>
  <div id="somediv"></div>

</body>

</html>

映射

<servlet>
        <servlet-name>ServletTeste2</servlet-name>
        <servlet-class>ServletTeste2</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>ServletTeste2</servlet-name>
        <url-pattern>/ServletTeste2/</url-pattern>
    </servlet-mapping>

请注意,如果我从

中删除//
//document.location.href = "http:..../ServletTeste2";

servlet工作,即我在屏幕上有一个新页面,屏幕上显示“示例文本”。

问题在于

$.get('http://.../ServletTeste2', 

返回false但

document.location.href = "http://.../ServletTeste2";

作品。

1 个答案:

答案 0 :(得分:0)

自从我使用Servlet以来已经有一段时间了,但问题似乎与NomeshDeSilva指出的是跨域AJAX问题有关。

检查您的控制台,检查是否有这样的错误:

XMLHttpRequest cannot load http://localhost:8080/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.

如果是这样,那么这意味着您需要在服务器上授予权限,表明接受了跨域请求。

因为,在这种情况下,您可以控制servlet的代码,只需尝试将以下行添加到servlet代码中:

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

重要提示:通配符允许任何域向您的主机发送请求。在检查这是否解决了问题后,建议您将“*”替换为您要发送请求的特定域。