Tengo un servidor de prueba en Catalyst (Web framework para Perl) creado directamente de un tutorial de ellos donde se explica también el concepto de MVC aplicado al servidor a través de scripts de Perl. El tema es que nosotros para ir aprendiendo un poco más de Perl modificamos ese servidor para que tome un JSON y podamos ver la reacción y cómo se comporta el servidor.
En principio tenemos un problema el cual este servidor genera una vista especificada por nosotros, en este caso HTML donde tiene la siguiente línea de código:
Using javascript Syntax Highlighting
- <script language="javascript" src="[% c.uri_for('/scripts/login/login.js') %]"/>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
En esta línea de JavaScript lo que queremos hacer es que se invoque ese archivo .js pero no lo hace sino que abajo tenemos que pegarle el código JavaScript en sí para que ande y pueda devolvernos lo que deseamos.
---------------------------------------------------------------------------
EDITO: descarten el problema de arriba, era un tema del código de JS que no estaba aceptando el cierre de la marca. Se completó la línea de JS y esto anda bien. Queda ver los problemas siguientes.
---------------------------------------------------------------------------
Otro problema que tenemos es que al hacer un stash tuvimos que generar una propoedad "foo" para poder encapsular el objeto dentro. Vemos que eso no está bien sino que se tendría que poder meter directamente el objeto.
Les paso algo del código en JavaScript para que se den cuenta de lo que hablo:
Using javascript Syntax Highlighting
- $("form#loginForm").submit(function() { // loginForm is submitted
- var username = $('#username').attr('value'); // get username
- var password = $('#password').attr('value'); // get password
- if (username && password) { // values are not empty
- $.ajax({
- type: "GET",
- url: "account/login", // URL of the Perl script
- contentType: "application/json; charset=utf-8",
- dataType: "json",
- // send username and password as parameters to the Perl script
- data: "username=" + username + "&password=" + password,
- // script call was *not* successful
- error: function(XMLHttpRequest, textStatus, errorThrown) {
- $('div#loginResult').text("responseText: " + XMLHttpRequest.responseText
- + ", textStatus: " + textStatus
- + ", errorThrown: " + errorThrown);
- $('div#loginResult').addClass("error");
- }, // error
- // script call was successful
- // data contains the JSON values returned by the Perl script
- success: function(data){
- if (data.foo.error == '1') { // script returned error
- $('div#loginResult').text("data.error: " + data.foo.message);
- $('div#loginResult').addClass("error");
- } // if
- else { // login was successful
- $('form#loginForm').hide();
- $('div#loginResult').text("data.success: " + data.foo.message
- + ", data.userid: " + data.foo.userid);
- $('div#loginResult').addClass("success");
- } //else
- } // success
- }); // ajax
- } // if
- else {
- $('div#loginResult').text("enter username and password");
- $('div#loginResult').addClass("error");
- } // else
- $('div#loginResult').fadeIn();
- return false;
- });
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Fíjense que tenemos data.foo.message, data.foo.error y data.foo.userid. Lo que queremos hacer es desencapsular el objeto fuera de foo. Si no nos equivocamos esta propiedad es propia de Catalyst y creo que ahí es donde nuestro error radica, pero de otra forma no sabemos hacerlo.
Otro problema que tenemos es que si el login es correcto o no se le pasa 0 o 1 respectivamente para poder chequear por medio de un log que pasa. Pero como eso se serializa para que lo tome JS al deserializarlo ese entero que guardamos queda como string y lo tenemos que convertir a mano.
Creemos que varias cosas nos están pasando porque seguramente nos falta instalar algún módulo de Perl el cual nos haga las cosas más fáciles.
¿Alguna sugerencia? Esto nos pasa al querer hacer un login simple. Repito: es solo para pruebas ya que estamos queriendo aprovechar el tiempo antes de empezar de forma completa con el proyecto.
Gracias.