PDA

Ver la versión completa : AJAX + ficheros en servidor (sin Base de Datos)



infomatms
06/06/2007, 12:54
Hola:

Tengo problemas con la codificación de un fichero en una unidad compartida en otro pc, está en ANSI, que intento abrir desde el lado cliente con Microsoft.XMLHTTP. Por defecto lo intentará abrir como UTF-8. Le he puesto todo tipo de encabezados pero me sigue llegando como UTF-8!:

...
new ActiveXObject("Microsoft.XMLHTTP"); //IE
...
var AJAXreceiveReq = getXmlHttpRequestObject();
...

//AJAXreceiveReq.open("POST",AJAXvalor, true);
AJAXreceiveReq.open("GET",AJAXvalor, true);
AJAXreceiveReq.setRequestHeader('Content-Type','text/plain; charset=iso-8859-1');
//AJAXreceiveReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=ISO-8859-1');
//AJAXreceiveReq.setRequestHeader('Content-Type', 'text/plain; charset=windows-1252');
//para no IE: AJAXreceiveReq.overrideMimeType('Content-Type', 'text/plain; charset=iso-8859-1');
...


Como veis he intentado de todo: GET, POST, text/plain, text/html. text/xml, iso-8859-1, windows-1252...

Si no encuentro solución me tendré que hacer un servlet que recodifique el fichero o una función correctora en javascript que corrija los caracteres "erroneos": á,é,í,ó,ú,Á...Ñ,ñ,Ç...


Gracias de antemano, Miguel Ángel.

jgutierrez
06/06/2007, 19:25
Tu problema está en que confundes la cabecera Content-Type (que es la que devuelve el servidor), con Accept-Charset que es la que el cliente debe enviar al servidor.

infomatms
07/06/2007, 09:50
Hola, gracias por tan rápida respuesta, JGutierrez.

He probado todo tipo de combinaciones GET, POST, META del HTML, CONTENT-TYPE y ACCEPT-CHARSET y aún no me funciona... Te adjunto un ejemplo de un HTML que no importa adecuadamente un fichero plano ANSI (c:\mi_fichero_ansi.txt), a ver si ves el fallo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"lang="es (http://www.w3.org/1999/xhtml)" xml:lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script language="javascript">
//AJAX (by Miguel Ángel Fuentes Casanova)
var AJAXresponse="";
function getXmlHttpRequestObject() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest(); //NO IE
} else if(window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP"); //IE
} else { //NO AJAX
alert("Navegador no compatible con AJAX!");
}
}
var AJAXreceiveReq = getXmlHttpRequestObject();
var AJAXQAfuncion = "";
function AJAXQueryAsincronaWeb(AJAXvalor,AJAXQAfuncionL) {
AJAXreceiveReq = getXmlHttpRequestObject();
AJAXQAfuncion=AJAXQAfuncionL;
if (AJAXreceiveReq.readyState == 4 || AJAXreceiveReq.readyState == 0) {
if(AJAXvalor=="")
{
alert("No se ha indicado variable!!");
return;
};
//AJAXreceiveReq.open("GET",AJAXvalor, false);
AJAXreceiveReq.open("GET",AJAXvalor, true);
AJAXreceiveReq.setRequestHeader("Accept-Charset", "ISO-8859-1;q=0.7");
//AJAXreceiveReq.setRequestHeader("Accept-Language", "sp,sp-sp,es,es-es;q=0.8");
//AJAXreceiveReq.setRequestHeader('Content-Type','text/plain; charset=iso-8859-1');
//AJAXreceiveReq.setRequestHeader('Content-Type','text/plain; charset=UTF-8');
//AJAXreceiveReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=ISO-8859-1');
//AJAXreceiveReq.setRequestHeader('Content-Type', 'text/plain; charset=windows-1252');
//para no IE: AJAXreceiveReq.overrideMimeType('Content-Type', 'text/plain; charset=iso-8859-1');
AJAXresponse="";
AJAXreceiveReq.onreadystatechange = AJAXWebLista;
try {
AJAXreceiveReq.send(null);
}
catch (er) {
alert("No se puede contactar con el servidor");
return true;
};
}
}
//Lamado sólo cuando se ha cargado la web:
function AJAXWebLista() {
if (AJAXreceiveReq.readyState == 4) {
AJAXresponse=AJAXreceiveReq.responseText;
eval(AJAXQAfuncion);
}
}
function miQueryOK()
{
alert(AJAXresponse);
//document.write(AJAXresponse);
};
</script>
</head>
<body>
AJAX Demo by Michael!
<input type="text" name="foo" value="file://c:/mi_fichero_ansi.txt!">
<input type="button" name="btnfoo" value="carga Web onlineMENTE ;P" onclick="javascript:AJAXQueryAsincronaWeb(document.all.foo. value,'miQueryOK()');">
</body>
</html>