friky.com
← Back to archive

Post

AJAX PINO, los poderes del ...

2006-03-08 Agustí Pons Original post

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 ! 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 !