AJAX PINO, los poderes del ...
Aquesta setmana estic fent un intensiu d'AJAX i estic totalment en larval state (fent el capullo, vamos!)
ajax pino, la tecnología del futur !
friky foto
No paro de trobar-me problemes i això que intento treballar amb llibreries que em facilitin la programació cross-browser i la majoria de traves inicials (prototype i scriptaculous), tot i això em torno boig !!!
Una de les ultimes que m'ha passat es que em fotia uns casques impressionants l'Explorer i tot per culpa del ContenType de la resposta a la crida AJAX.
NOTE: WATCH OUT: Internet Explorer totally hangs using Ajax.Updater when the request output of the server has a Content Type="text/html; encoding=ISO-8859-1"
La part de codi java del servlet que responia a la crida ajax és el següent:
private void printout (HttpServletResponse p_response, String p_text)
{
try
{
// La seguent linea fa petar l'EXPLODER estrepitossament
//p_response.setContentType("text/html; encoding=ISO-8859-1");
p_response.setContentType("text/html");
PrintWriter out = p_response.getWriter();
out.println(p_text);
out.flush();
out.close();
}
catch (Exception e)
{
System.out.println("No podem escriure, ERROR kt ginyas !!!");
}
}
La línia comentada provocava que el Explorer fotes una petada impressionant, just al cridar al prototype a la funció Ajax.Updater
Nomes canviant l'encoding sembla que tot funciona i puc continuar avançant.
Com sempre he estat unes quantes hores trencant-me les banyes i al final, dinant, se'm ha acudit que aquest es un dels canvis que havia fet abans de que em comences a petar tot.
El Explorer es moooooooolt sensible, i això que estem parlant de la versió 6 !
Altres coses interessants que he fet aquesta setmana amb AJAX, es fer un parell de petits canvis a la llibreria prototype versió 1.4.0
Per no barrejar conceptes he anomenat a la meva llibreria "PROPOTYPE.js" en concret he tocat aquestes línies.
Canvi 1, aproximadament per la línia 630:
request: function(url) {
var parameters = this.options.parameters || '';
if (parameters.length > 0) parameters += '&_=';
S'ha d'eliminar la línia del if, si no vols que et fiqui un paràmetre fictici al final, quedant:
request: function(url) {
var parameters = this.options.parameters || '';
Aquest canvi esta documentat a la web del scriptaculous que ja ho havien detectat.
Canvi 2, sobre la línia 1268, si voleu que els valors dels formularis que enviïs per ajax acceptin codificacions diferents de UTF-8 (nosaltres sempre fem servir ISO-8859-1):
return parameter[1].map(function(value) {
return key + '=' + encodeURIComponent(value);
}).join('&');
Escapar els URI components, perquè a la URL passem els valors escapats amb HTML, així no tenim problemes d'encoding.
return parameter[1].map(function(value) {
return key + '=' + encodeURIComponent(escape(value));
}).join('&');
Aquest canvi ha esta fet amb micro-cirurgia pel Manel Vidal.
Encara hi ha gent més friky que jo, aqui una carta de Magic tunejada per fer conya amb el AJAX PINO !
friky foto