如何让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
非常感谢你,这是我失踪了! – Ian