Frage

Für eine sehr einfache ajax-name-lookup, ich werde senden ein id von der client-Webseite auf dem server (Tomcat 5.5, Java 5), suchen Sie es in einer Datenbank und zurückgeben einer Zeichenfolge, die eine Zuordnung zu einer javascript-variable zurück, die in der client (und dann angezeigt).

Der javascript-code, erhält der Wert ist ziemlich standard:

//client code - javascript
xmlHttp.onreadystatechange=function() {
    if (xmlHttp.readyState==4) {
        var result = xmlHttp.responseText;
        alert(result);
        ...
    }
    ...
}

Auf den string, den ich ursprünglich hatte dieser in der server:

//server code - java
myString = "...";
out.write(myString.getBytes("UTF-8"));

Das funktionierte perfekt, wenn Sie unsicher sind.Später ersetzte ich es mit:

import org.apache.commons.lang.StringEscapeUtils;
...
myString = "...";
out.write(StringEscapeUtils.escapeJavaScript(myString).getBytes("UTF-8"));

Während aber sicherer, ist der resultierende string nicht korrekt angezeigt werden, wenn es enthält spezielle Zeichen wie "ñ".

Zum Beispiel:

escapeJavaScript("años").getBytes("UTF-8");

sendet:

an\u00F1os

an den client.

Die Frage:gibt es eine einfache Möglichkeit, um eine Analyse der resultierende string in Javascript oder gibt es eine Alternative escape-Funktion, die ich verwenden kann, die in java würde verhindern, dass dieses Problem?

War es hilfreich?

Lösung

Das folgende funktioniert in jedem browser, die ich ausprobiert habe:

javascript:alert("a\u00F1os");

Vielleicht ist Ihre Zeichenfolge mit Escapezeichen versehen zweimal durch Fehler.

Andere Tipps

Tatsächlich, jetzt, da ich es gelesen habe, habe ich glaube ich tatsächlich nicht zu entkommen müssen Sie die Zeichenfolge ich werde senden zurück zu allen...Das ist, StringEscapeUtils.escapeJavaScript wäre nützlich, wenn der resultierende Wert war, gedruckt in der Seite, z.B.:

//javascript code with inline struts
var myJavasriptString = "<%=myJavaString%>";

Oder bin ich etwas fehlt, und es wäre immer noch ein Gültiger Grund, die Flucht in die original Gehäuse?(wenn es zurückgegeben wird, als eine Reihe von bytes zurück, um eine ajax-onreadystatechange-handler zugeordnet und eine js-variable)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top