【问题标题】:Write an array response from servlet to JavaScript?将 servlet 的数组响应写入 JavaScript?
【发布时间】:2013-09-01 22:07:15
【问题描述】:

我正在尝试使用 PrintWriter.out.write() 编写单个 Array 对象作为对 JavaScript (AJAX) 函数的响应,
这可能吗?还是我需要在发送之前以相同的方式转换数组?
尽量避免创建逗号分隔的字符串,然后在 JS 中解析

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    out.write(listDir());
}


private File[] listDir(){

    File folder = new File("/home/rob/");
    File[] listOfFiles = folder.listFiles();

    //System.out.println("Number of files found: " + listOfFiles.length);

    return listOfFiles;
}

然后想遍历调用 JavaScript AJAX 函数中的文件:

if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {

    for (var i = 0; i < xmlhttp.responseText.length; i++) {
        alert(xmlhttp.responseText[i]);
    } 
}

【问题讨论】:

  • 由于您不想以文本格式从 Servlet 做出响应,因此您必须将结果转换为 JSON 格式,您可以在此答案中查看一个很好的示例stackoverflow.com/a/4113258/2727401跨度>

标签: java arrays servlets printwriter


【解决方案1】:

Java 的数组对象没有toString() 方法的实现。因此,您的输出来自

out.write(listDir());

看起来像

[Ljava.io.File;@5d9d277e

你绝对不想要这个。有很多方法可以序列化数组。其中之一是通过, 分隔元素

out.write(Arrays.toString(listDir()));

给你类似的东西

[some.txt, other.png]

其他格式包括 JSON 和 XML。由于 Javascript 带有内置的 JSON 解析器,我建议您使用 JSON。你可以找到一个 Java JSON 库here。如果您返回 JSON 之类的内容(例如 application/json),请更改内容类型。

【讨论】:

    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2011-01-18
    • 1970-01-01
    • 2011-02-28
    • 2012-10-30
    相关资源
    最近更新 更多