如何让 NanoHTTPD 响应 AJAX

How to have NanoHTTPD respond to AJAX

我试图让 NanoHTTPD(在 android 设备上)以请求 javascript 可以解释响应的方式响应 AJAX 请求。

我已经实现了 NanoHTTPD 服务方法:

    public NanoHTTPD.Response serve(String uri, NanoHTTPD.Method method,
                          Map<String, String> header,
                          Map<String, String> parameters,
                          Map<String, String> files) {

        String msg = "Hello, you have connected.";
        return newFixedLengthResponse( msg );
    }

如果我从本地网络浏览器连接到“http://127.0.0.1:8080”,它会加载一个包含源的页面:

<html>
    <head></head>
    <body>Hello, you have connected.</body>
</html>

到目前为止一切顺利,尽管我不确定 html 格式是在哪里引入的。

但我坚持的是,如果我使用 javascript 中的 AJAX 来尝试传递数据:

$.ajax({
        url: 'http://127.0.0.1:8080',
        type: 'POST',
        data:{ printData: dataToPrint },
        success: function(d){
            alert('success');
        },
        error: function (jqXHR, textStatus) {
            alert("failed, jqXHR: " + jqXHR.responseText + "  " + jQuery.parseJSON(jqXHR.responseText) + "  textStatus: " + textStatus);
        }
    })

(这只是一个例子,我试过 success/fail/done/error 方法,我试过指定数据类型,我试过 return 函数中的不同参数,none 有效)。当此 javascript 为 运行 时,NanoHTTPD 服务器会很好地接收 printData,但当它发送响应时,它只会触发 error/fail 方法,并且方法参数从不包含任何内容 -我无法设置状态或 return 消息或任何内容。

我尝试了不同的 return 服务方法,包括:

String mime_type = NanoHTTPD.MIME_PLAINTEXT;

String msg = "{\"status\":\"1\",\"responseText\":\"this is the response\"}";

InputStream testReply = new ByteArrayInputStream(msg.getBytes(StandardCharsets.UTF_8));

// return newFixedLengthResponse(NanoHTTPD.Response.Status.OK, "", msg);
// return new NanoHTTPD.Response( NanoHTTPD.Response.Status.OK, mime_type, testReply);
// return NanoHTTPD.newFixedLengthResponse( NanoHTTPD.Response.Status.OK, mime_type, msg);
// return NanoHTTPD.newFixedLengthResponse(msg);

None 这些作品。

我也试过这个javascript:

$.get("http://127.0.0.1:8080", function( my_var ) {
        console.log(my_var);
    });

如果这是 运行 我在 NanoHTTPD 上的断点被触发,但是 javascript 方法根本没有被触发。

我认为您需要在服务器响应中添加这些 headers:

    Access-Control-Allow-Origin: *
    Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
    Access-Control-Max-Age: 86400