如何让 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
我试图让 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