Pergunta

Para uma pesquisa de nome ajax muito simples, eu estou enviando um id no site do cliente para o servidor (Tomcat 5.5, Java 5), ??procurando-lo em um banco de dados e devolver uma cadeia, que é atribuído a uma variável javascript de volta ao cliente (e, em seguida, exibido).

O código javascript que recebe o valor é bastante normal:

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

Para voltar a corda, eu originalmente tinha isso no servidor:

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

O que funcionou perfeitamente, se inseguro. Mais tarde, eu substituí-lo com:

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

Mas, enquanto mais seguro, a string resultante pode não ser exibido corretamente se ele contém caracteres especiais, como "n".

Por exemplo, usando:

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

envia:

an\u00F1os

para o cliente.

A pergunta: existe uma maneira simples de analisar a cadeia resultando em Javascript ou há uma função de saída alternativa que eu posso usar em java que impeça esta questão

?
Foi útil?

Solução

As seguintes obras em todos os navegadores que eu tentei:

javascript:alert("a\u00F1os");

Talvez a seqüência está sendo escapou duas vezes por engano.

Outras dicas

Na verdade, agora que eu li sobre isso, eu acho que realmente não necessidade de escapar a corda Estou enviando de volta em tudo ... Ou seja, StringEscapeUtils.escapeJavaScript seria útil se o valor resultante foi impresso na página, como:

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

Ou estou faltando alguma coisa e ainda haveria uma razão válida para fazer a escapatória no caso original? (Quando ele é retornado como uma série de bytes de volta a um ajax onreadystatechange manipulador e atribuído a uma variável js)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top