20060308

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