2012-08-06 30 views
1

我得到了tomcat的8080端口和簡單的servlet運行:在URL這個小服務程序的getJSON和servlet通信錯誤

import java.io.*; 
import java.text.*; 
import java.util.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.awt.*; 

public class MyHelloWorld extends HttpServlet { 

    public void doGet(HttpServletRequest request, 
      HttpServletResponse response) 
    throws IOException, ServletException 
    { 
     String data = "Hello World from servlet!"; 
     response.setContentType("text/plain"); 
     response.setCharacterEncoding("UTF-8"); 
     response.getWriter().write(data); 
    } 
} 

wget的,retrives的字符串:

"Hello World from servlet!" 

也web瀏覽器打印它,所以它的工作原理和Tomcat的訪問日誌顯示響應「200」

但是,當我嘗試通過我的JavaScript獲得這個字符串:

<html> 

<head> 
<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script> 


      $.getJSON({ 
    type: "GET", url: "http://localhost:8080/examples/MyHelloWorld", 
    contentType: "text/plain", 
    error: function(xhr, ajaxOptions, thrownError){ 
       alert(ajaxOptions); 
       alert(xhr.status); 
       alert(thrownError); 
      }, 
    processData: true, 
    success: function(data, textStatus, jqXHR){ alert(data); } 
}); 
</script> 

</script> 

</head> 

Tomcat的日誌,我可以看到響應200,但瀏覽器不顯示任何東西 - 只是沒有內容的空白頁。如果我改變getJSONgetajax我得到警報與:

xhr.status = 0 
ajaxOptions = "error" 
thrownError = empty 

Web服務器是Apache和它在端口上運行80

THX的所有幫助

+0

getJSON'方法'錯誤用法:http://api.jquery.com/jQuery.getJSON/ – Serjio 2012-08-06 14:47:00

回答

2

嘗試是這樣的:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 
    String data = "Hello World from servlet!"; 
    response.setContentType("text/plain"); 
    response.setCharacterEncoding("UTF-8"); 

    if (request.getContentType().equals("application/json")) { 
     data = "\"" + data + "\""; 
    } 

    response.getWriter().write(data); 
} 

而在你的JS:

$.getJSON("http://localhost:8080/examples/MyHelloWorld", function(data) { 
    alert(data) 
}) 
0

輸出:

"Hello World from servlet!" 

這是一個字符串,而不是JSON對象,通過jsonlint.com運行它。你的輸出應該是這樣的:

{ "data" : "Hello World from servlet!" } 

與適當的內容類型「application/json」集。

如果你想只得到一個純文本字符串,使用$.get()

+0

但字符串也是JSON - HTTP: //www.json.org/ – Serjio 2012-08-06 14:44:49

+1

@Serjio HUH?你在說什麼? 'JSON.parse( 「ASDF」)'將產生:_SyntaxError:JSON.parse:意想不到character_ – epascarello 2012-08-06 14:48:30

+0

'JSON.stringify(123)=> 「123」','JSON.parse( 「123」)=> 123', 'JSON.parse( 「\」 123 \ 「」)=> 「123」' – Serjio 2012-08-06 14:51:40

0

寫的是這樣的,

String data = "{\"message\":\"Hello World from servlet!\"}"; 

而且對JS做,

alert(data.message); 
+0

我改變了代碼,正如你所說,仍然有空白屏幕 – JosiP 2012-08-06 14:55:06

0

而且,在鉻我的Java scripit控制檯說:

GET http://10.10.1.19/[object%20Object] 404 (Not Found) jquery-latest.min.js:4 
f.support.ajax.f.ajaxTransport.send jquery-latest.min.js:4 
f.extend.ajax jquery-latest.min.js:4 
f.each.f.(anonymous function) jquery-latest.min.js:4 
f.extend.getJSON jquery-latest.min.js:4 
(anonymous function)