我试图让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 );
}如果我从本地with浏览器连接到"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很好,但是当它发送响应时,只会触发错误/失败方法,而方法参数永远不会包含任何内容--我不能设置状态或返回消息或任何东西。
我尝试了与服务方法不同的回报,包括:
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方法。
发布于 2015-12-02 09:55:20
我认为您需要在服务器响应中添加这些头:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 86400https://stackoverflow.com/questions/34039392
复制相似问题