javascript - 如何让 NanoHTTPD 响应 AJAX

标签 javascript ajax nanohttpd

我试图让 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);
        }
    })

(这只是一个例子,我试过成功/失败/完成/错误方法,我试过指定数据类型,我试过返回函数中的不同参数,但都不起作用)。当运行此 javascript 时,NanoHTTPD 服务器会很好地接收 printData,但是当它发送响应时,它只会触发错误/失败方法,并且方法参数从不包含任何内容——我无法设置状态或返回消息或任何东西。

我尝试了 Serve 方法的不同返回值,包括:

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);

这些都不起作用。

我也试过这个javascript:

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

如果运行我在 NanoHTTPD 上的断点,但根本不会触发 javascript 方法。

最佳答案

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

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

关于javascript - 如何让 NanoHTTPD 响应 AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34039392/

相关文章:

javascript - jQuery 显示和隐藏动态类不起作用

android - 如何使用 NanoHTTPD 在 android 上创建桌面可以访问的 http 服务器(反之亦然)

javascript - Home 组件仅在刷新时加载(而不是在初始加载时),竞争条件?

javascript - 如何在 openstreetmap 中编辑数据层可见性的缩放级别

javascript - 如何做到让代码在不传递条件后执行函数?

javascript - 访问控制允许方法似乎不起作用

javascript - jQuery在模式框中向服务器发出多个请求

javascript - Ajax 加载 url 中存在空格的问题

java - Android AssetServer 扩展 NanoHTTPD

java - NanoHTTPD 示例构建错误