2015-12-02 116 views
3

我試圖讓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方法不會被觸發的。

回答

2

我認爲你需要在你的服務器響應添加這些標題:

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

非常感謝你,這是我失蹤了! – Ian