【问题标题】:How to recall a Java method into JavaScript by Json?如何通过 Json 将 Java 方法召回到 JavaScript?
【发布时间】:2016-05-20 10:33:21
【问题描述】:

我无法打印 Json 字符串,从我的 html 页面中的 Java 方法返回。我不记得 JavaScript 中的方法“证明”Java。能给我一些提示吗?

Java 类

import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List;

public class JsonDiProva {

public String proof() {

    List<String> names = new ArrayList<String>();
    names.add("Alice");
    names.add("Bob");
    names.add("Carol");
    names.add("Mallory");

    Gson gson = new Gson();
    String jsonNames = gson.toJson(names);

    return jsonNames;

    }
}

Jsp 页面

<p id="demo"></p>
<script>
var prv = JSON.parse('<% new JsonDiProva().proof() %>;');
document.getElementById("demo").innerHTML = prv; 
</script>

【问题讨论】:

    标签: javascript java html json jsp


    【解决方案1】:

    1) %&gt; 之后的 ; 使 JSON 无效,这里:

    var prv = JSON.parse('<% new JsonDiProva().proof() %>;');
    

    那是因为您的 proof 方法可能返回类似 ["a","b","c"] 的内容,所以它会尝试执行 JSON.parse('["a","b","c"];'),注意分号 - 这将失败,因为 ["a","b","c"]; 带分号 不是有效的 JSON 语法。

    应该是这样的:

    var prv = JSON.parse('<% new JsonDiProva().proof() %>');
    

    但无论如何,这看起来是一种奇怪的方式,我会这样写:

    var prv = <% new JsonDiProva().proof() %>;
    

    这是可行的,因为结果将类似于 var prv = ["a","b","c"];,这正是我们想要的,不需要额外的解析。

    2) 您将可能是一个数组分配给innerHTML。我认为这不会按您预期的方式工作。

    首先,您应该使用innerText 而不是innerHTML,除非您真的想在其中显示 HTML。其次,您的数组将被隐式转换为类似于a,b,c 的字符串,其中没有空格。你可能应该打电话给join 让它看起来更漂亮,像这样:

    document.getElementById("demo").innerHTML = prv.join(", ");
    

    注意逗号后面的多余空格,所以后面会显示为a, b, c

    (这里的另一个优点是您可能会错误地认为prv 是一个字符串并在其上调用replace 之类的东西并想知道为什么它不起作用。)

    【讨论】:

    • 还不能打印。我尝试了你的提示没有成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    相关资源
    最近更新 更多