【问题标题】:getJSON and servlet communication errorgetJSON 和 servlet 通信错误
【发布时间】:2012-08-03 13:14:17
【问题描述】:

我在端口 8080 和简单的 servlet 上运行了 tomcat:

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 访问该 serverlet 的 URL,检索字符串:

"Hello World from servlet!"

网络浏览器也打印出来,所以它可以工作,并且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,但浏览器没有显示任何内容 - 只是没有内容的空白页面。如果我将getJSON 更改为getajax,我会收到以下警报:

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

web 服务器是 apache,它在 80 端口上运行

谢谢大家的帮助

【问题讨论】:

标签: javascript servlets


【解决方案1】:

输出:

"Hello World from servlet!"

这是一个字符串,而不是JSON 对象,通过jsonlint.com 运行它。您的输出应类似于:

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

设置了正确的内容类型“application/json”。

如果您只想获取纯文本字符串,请使用$.get()

【讨论】:

  • @Serjio 嗯?你在说什么? JSON.parse("asdf") 将产生:SyntaxError: JSON.parse: unexpected character
  • JSON.stringify(123) =&gt; "123", JSON.parse("123") =&gt; 123, JSON.parse("\"123\"") =&gt; "123"
  • @Serjio 猜测您正在使用 Chrome,通过 jsonlint.com 运行您的代码并查看内容。
  • 我的代码也适用于 FF。它也适用于 PHP:php &gt; echo json_encode("123"); # ouput is "123"。只需阅读 JSON 规范。还有关于 stackoverflow 上的 JSON:stackoverflow.com/questions/383692/…
  • 必须是 JSON.parse('"foo"'); 才能在 Firefox 和 IE 中进行解析。
【解决方案2】:

这样写,

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

在 JS 上做,

alert(data.message);

【讨论】:

    【解决方案3】:

    试试这样的:

    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)
    })
    

    【讨论】:

      【解决方案4】:

      另外,我在 chrome 下的 java 脚本控制台说:

      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)
      

      【讨论】:

        猜你喜欢
        • 2010-11-06
        • 1970-01-01
        • 2018-10-30
        • 2015-07-29
        • 2011-01-25
        • 2012-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多