如何让NanoHTTPD响应AJAX

问题描述:

我试图让NanoHTTPD(在Android设备上)以请求的JavaScript可以解释响应的方式响应AJAX请求。如何让NanoHTTPD响应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格式引入的位置。

但是,我坚持上是,如果我使用AJAX从JavaScript来尝试传递数据:

$.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就好了,但是当它发送响应时,它只会触发错误/失败方法并且方法参数永远不会包含任何内容 - 我无法设置状态或返回消息或任何东西。

我试着从即成方法不同的回报,包括:这些工作

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方法不会被触发的。

我认为你需要在你的服务器响应添加这些标题:

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

非常感谢你,这是我失踪了! – Ian