【问题标题】:Can't get response from Java HttpServer with jquery Ajax无法使用 jquery Ajax 从 Java HttpServer 获得响应
【发布时间】:2017-08-21 05:59:08
【问题描述】:

我有一个 Java Http Server 正在运行,它响应 Hello World。代码如下。

public class ScannerHttpService {

    public static void startService() throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
        server.createContext("/jsp", new JspHandler());
        server.setExecutor(null); // creates a default executor
        server.start();
    }

    static class JspHandler implements HttpHandler {
        @Override
        public void handle(HttpExchange t) throws IOException {
            String response = "Hello World";
            //specify it before sendResponseHeaders()
            t.getResponseHeaders().add("Content-Type", "text/plain; charset=" + StandardCharsets.UTF_8.name());
            t.sendResponseHeaders(200, response.length());
            System.out.println(t.getResponseHeaders().entrySet());
            OutputStream os = t.getResponseBody();
            os.write(response.getBytes(StandardCharsets.UTF_8));
            os.close();
        }
    }
}

我想使用 ajax 调用此服务并在 jsp 页面的警报窗口中显示响应。我正在使用以下代码。

<%@page import="java.io.*" %>
<%@page import="java.net.*" %>
<%@page import="java.nio.charset.StandardCharsets" %>

<html>
<head>
    <title>Service Verification</title>
    <%--<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>--%>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
    <script>
        function getText(){
            var response = '';
            $.ajax({ type: "GET",
                url: "http://example.com:8000/jsp",

                success : function(text)
                {
                    response = text;
                },
                error : function()
                {
                    response = "Fail"
                }
            });

            alert(response);
        }
    </script>
</head>
<body>
    <form accept-charset="utf-8">
        <h3>Click Ready!</h3>
        <input type="submit" value="Ready" onclick="getText()"/>
    </form>
</body>
</html>

我无法从服务器获得响应。它在浏览器中抛出以下错误。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://example.com:8000/jsp. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing). 1 (unknown)

我哪里做错了?我可以访问这两个代码。服务器和客户端都在同一个网络中。

编辑: 根据@Brian bcr666 Ray 和@Sandeep 的建议,我添加了

t.getResponseHeaders().add("Access-Control-Allow-Origin", "*");

到java代码。它现在正在工作。

【问题讨论】:

标签: java ajax


【解决方案1】:

看起来 Ajax 调用源自托管在服务器之外的某个其他域上的 UI。您可以在您的服务器上为 /jsp 端点启用 CORS,它应该可以工作。

关注这个:https://enable-cors.org/server.html

【讨论】:

    【解决方案2】:

    Cross-Origin Request Blocked: The Same Origin Policy 表示您的网页位于一个域中,但您使用 javascript 从另一个域 (example.com:8000) 进行 ajax。出于安全原因,这是不允许的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多