olá,
estou tendo problemas em um exemplo q estou implementando, usando Ajax com JSON. É para ser um tipo de auto-completador de texto, onde eu digito um pedaço do nome da cidade e me retorna as opções disponíveis. Na página de requisiçao tem o seguinte código (abreviado):
var xmlhttp;
//não IE
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
//Internet Explorer
else if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
//objeto não suportado
}
function alteraCidade2() {
var aux = document.getElementById("txtCidade").value;
//if (length(aux) > 3) {
var theUrl = "obterCidadesPorNome.jsp?nomeCidade=" + aux;
xmlhttp.open("GET", theUrl, true);
xmlhttp.onReadyStateChange = function() {
if (xmlhttp.readyState == 4) {
criaComboCidades(xmlhttp.responseText);
}
}
xmlhttp.send(null);
//}
}
function criaComboCidades(AjaxResponse) {
var data = eval(AjaxResponse);
var htmlText = "<select name=selCidade size=10>";
for (i = 0; i < data.length; i++) {
htmlText = htmlText + "<option value=" + data[i].codigo + ">" + data[i].nome + "</option>";
}
htmlText = htmlText + "</select>";
document.getElementById("comboCidade").innerHTML = htmlText;
}
---no form----
<input id="txtCidade" type="text" size="50" value="" onkeyup="javascript:alteraCidade2()"/>
<div id="comboCidade"></div>
e na página de respostas, que devolve o JSON, chamada obterCidadesPorNome.jsp, o código é o seguinte:
<%@page contentType="text/xml"%>
<%@page pageEncoding="ISO8859-1"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<jsp:useBean id="cidadeDao" class="carros.dao.CidadeDao" />
<c:set var="cidades" value="<%=cidadeDao.list(request.getParameter("nomeCidade"))%>" />
[
<c:forEach var="cidade" items="${cidades}" varStatus="status">
{
codigo:'${cidade.codigo}',
nome:'${cidade.nome}'
}
<c:if test="${not status.last}">
,
</c:if>
</c:forEach>
]
aí vem o problema, no IE, isso está funcionando corretamente, mas no Firefox, se eu insiro uma letra no campo, ele não mostra a resposta e, se vou no console do javaScript, aparece o seguinte erro:
Erro: erro de sintaxe
Arquivo-fonte: http://localhost:8084/carros/obterCidadesPorNome.jsp?nomeCidade=MARE
Linha: 7, Coluna: 1
Código-fonte:
[{codigo:'7683', nome:'MARECHAL CÂNDIDO RONDON'},{codigo:'2793', nome:'MARECHAL DEODORO'},{codigo:'2929', nome:'MARECHAL FLORIANO'},{codigo:'655', nome:'MARECHAL THAUMATURGO'},{codigo:'9963', nome:'MAREMA'}]^
parece estar certo, não é? tenho q colocar algo antes dos resultados?
desde já,
obrigado