2016-05-20 2 views
1

Ich kann JSON String, der von einer Methode Java zurückkehrt, in htlm-Seite nicht drucken. Ich kann mich nicht erinnern, die Methode "Beweis" Java in JavaScript. Kannst du mir ein paar Hinweise geben?Wie ruft man eine Java-Methode von Json in JavaScript zurück?

Java-Klasse

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 Seite

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

Antwort

1

1) Ihre ; nach dem %> die JSON ungültig macht, hier:

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

Das ist, weil Ihre proof Methode vermutlich so etwas wie ["a","b","c"] zurückgibt, so wird es versuchen, JSON.parse('["a","b","c"];') zu tun, das Semikolon bemerken - was fehlschlagen, weil ["a","b","c"];mit Semikolon nicht gültig JSON-Syntax ist.

Es sollte wie folgt aussehen:

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

Aber das sieht aus wie eine seltsame Art und Weise, es trotzdem zu tun, würde ich es nur schreiben wie folgt aus:

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

Das funktioniert, weil das Ergebnis wird wie var prv = ["a","b","c"]; sein, was genau das ist, was wir wollen, kein zusätzliches Parsing benötigt.

2) Sie ordnen wahrscheinlich ein Array innerHTML zu. Ich denke, das wird nicht so funktionieren, wie du es erwartet hast.

Zuerst sollten Sie innerText und nicht innerHTML verwenden, es sei denn, Sie möchten dort wirklich HTML anzeigen. Zweitens wird Ihr Array implizit in einen String konvertiert, der wie a,b,c aussieht, ohne Leerzeichen. Sie sollten wahrscheinlich join anrufen, um es schöner aussehen zu lassen, wie folgt aus:

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

Beachten Sie den zusätzlichen Platz nach dem Komma, so wird es später als a, b, c angezeigt.

(Der andere Vorteil ist, dass Sie sonst fälschlicherweise könnten glauben, dass prv ein String ist und so etwas wie replace auf sie anrufen und fragen, warum es nicht funktionieren.)

+0

Es es noch nicht drucken kann. Ich habe deine Hinweise erfolglos versucht. – sean

+0

Was ist der Fehler, den Sie bekommen? – CherryDT

Verwandte Themen