viernes, 11 de febrero de 2011

Conflictos de $ entre JQuery y otras librerias

Puede que en nuestra aplicación web necesitemos incluir librerías adicionales a jQuery por diversos motivos.El identificador $ es muy usado en varias librerías debido a que es simple y corto , por tanto puede que exitan conflictos en el uso de este identificador entre jQuery y otras librerías.

Para solucionar este problema jQuery nos proporciona el método: .noConflict().
Este método se encarga de devolver el control del identificador $ a otras librerias.

Véamos un ejemplo:


<script src="libreria1.js" type="text/javascript"></script>
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript" >
  
   jQuery.noConflict();

</script> 

La pregunta ahora es ¿cómo podemos volver a usar el identificador $ en jQuery? Por suerte tenemos un pequeño As bajo la manga , el método .ready() puede tomar en su  funcion de retrollamada un parámetro , el propio objeto JQuery:

jQuery(document).ready(funtion($){
   
   //Aqui ya podemos usar $ libremente

});

 

domingo, 19 de septiembre de 2010

Comunicacion Java y PHP mediante JSON

Hace poco me surgió la necesidad de tener que comunicar una aplicacion Java (cliente) con PHP (servidor) el cual enviaría datos obtenidos de base de datos a la capa cliente de Java.La solución que encontramos fue la siguiente: usando datos en formato JSON y ayudandonos de la librería URLConnection de Java.

A continuación veremos un ejemplo sencillo de como realizar esta comunicación.
En primer lugar preparamos los datos que vamos a enviar y los convertimos a formato JSON mediante la librería Gson de Google:

Map <String,String> datosEnv=new HashMap<String,String>();
datosEnv.put("nombre", "pepe");
datosEnv.put("apellido","Gonzalez");

//Creamos la cadena con los datos en formato JSON 
Gson gson = new Gson();
String jsonOutput = gson.toJson(datosEnv);

A continuación estableceremos conexion con el servidor y le enviaremos los datos por Post y recibiremos la respuesta por parte del servidor:

try{
          //Usamos URLencode para poder enviar la cadena
          jsonOutput = URLEncoder.encode("key", "UTF-8") + "=" + URLEncoder.encode(jsonOutput, "UTF-8");
          //Establecemos la conexion y enviamos los datos
          URL url=new URL("http://localhost/serv/index.php");
          URLConnection con = (URLConnection) url.openConnection();
          con.setDoOutput(true);
          OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
          wr.write(jsonOutput);
          wr.flush();
          //Recibimos los datos
          BufferedReader recv = new BufferedReader(new InputStreamReader(con.getInputStream()));
          //Los mostramos por pantalla
          String s=recv.readLine();
          while(s!=null){
                  System.out.println(s);
                  s=recv.readLine();
                }
       }catch (Exception e){
           System.out.println(e.getMessage());
       }

Bien ya tenemos listo el código de la parte cliente , ahora veamos como tratamos los datos en el servidor y generamos una respuesta.Para ello debemos tener el siguiente código en el archivo index.php

<?php
    //Decodificamos los datos
    $se=json_decode(stripslashes($_POST["key"]));
    //Mostramos los datos
    echo"Soy el servidor , te envio los siguientes datos:\n";
    echo "Nombre: ".$se->nombre."\n";
    echo "Apellido: ".$se->apellido."\n";

?>


Destacar que en la parte servidor todo lo que genere código para ser visualizado será enviado a la parte cliente.En este caso la parte cliente recibirá lo siguiente:

Soy el servidor , te envio los siguientes datos:
Nombre: pepe
Apellido: Gonzalez

Aquí tenéis el código completo de la parte cliente para que podáis probarlo:

import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author Lakatos
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        estableceComunicacion();
    }

    private static void estableceComunicacion() {
        Map <String,String> datosEnv=new HashMap<String,String>();
        datosEnv.put("nombre","pepe");
        datosEnv.put("apellido","Gonzalez");       
        Gson gson = new Gson();
        String jsonOutput = gson.toJson(datosEnv);      
       try{
          //Usamos URLencode para poder enviar la cadena
          jsonOutput = URLEncoder.encode("key", "UTF-8") + "=" + URLEncoder.encode(jsonOutput, "UTF-8");
          //Establecemos la conexion y enviamos los datos
          URL url=new URL("http://localhost/serv/index.php");
          URLConnection con = (URLConnection) url.openConnection();
          con.setDoOutput(true);
          OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream());
          wr.write(jsonOutput);
          wr.flush();
          //Recibimos los datos
          BufferedReader recv = new BufferedReader(new InputStreamReader(con.getInputStream()));
          //Los mostramos por pantalla
          String s=recv.readLine();
          while(s!=null){
                  System.out.println(s);
                  s=recv.readLine();
                }
       }catch (Exception e){
           System.out.println(e.getMessage());
       }

    }

}
Espero que os sirva de ayuda.
Un saludo.