Comunidad de diseño web y desarrollo en internet online

Cargar Archivos JS y CSS desde PHP a traves del metodo AJAX?

Citar            
MensajeEscrito el 09 Ene 2008 06:17 am
me estado preguntando e investigando pero no encuntro una secuencia de pasos que me permitan hacer esto.

el usuario(cliente) posee un Id (11000101) y se lo envia al servidor. Este Id por si solo no significa nada pero representa un registro en una tabla en una base de datos por ejemplo.

Usuario
ID=101;

Servidor:
dentro de la tabla Interfaces representa lo siguiente
ID=101;
JS=nuevo_usuario.js;
PHP=nuevo_usuario.php;
CSS=nuevo_usuario.css;
tables=usercontrol,userinfo.

ahora bien utilizando Ajax el cliente puede preguntarle al servidor atraves de la pagina "Utilizar_id.php" el registro de la tabla interfaces. e inclusive utilizar el archivo PHP para
cargar todos los input,botones,div,textos...etc, pero quiero saver si es posible cargar los
archivos JS y CSS asincronamente con Ajax.


en mente tengo una solucion.
consultar la pagina "utilizar_id.php"
y que esta me devuelva el registro de la tabla interface.
y que la funcion que llamo al ajax se encargue de incrustar el css y el js
utilizando algo asi:

Código :

function utilizar_interface()
{
respuesta=Ajaxload("utilizar_id.php",ID_interfaz);

arreglo=split(",",respuesta);
pathJS=arreglo[0];
pathCSS=arreglo[1];
pathPHP=arreglo[2];

//pathJS se extrae de la respuesta del servidor
var js = document.createElement("script");
js.type = "text/javascript";
js.src = pathJS;
document.body.appendChild(js);

//pathCSS se extrae de la respuesta del servidor
var css = document.createElement("CSS");
css.type = "text/css";
css.rel="stylesheet";
css.src = pathCSS; //creo que href
document.body.appendChild(CSS);

//y volver a llamar asincronamente al servidor para cargar los elementos del archivo PHP.
Ajaxload(pathPHP,document);
}



bueno eso tengo en mente pero bueno primero necesito saver si es posible agregar un js y css con la respuesta regresada del servidor.

Por aprendice

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 09 Ene 2008 10:57 am
¿cambiar dinámicamente el CSS en una página? ¿y que se vea instantáneamente el cambio?
Si es eso, sí que se puede, al menos, con la librería ASSET de mootools, cuyo ejemplo encontrarás aquí.

Luego... dependerá que tu .php devuelva correctamente el CSS que se le pide, según la sesión logueada, o los requerimientos que le quieras implantar.
Para los JS, vale también la misma librería.

(aunque no se si te referías a eso)

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 10 Ene 2008 05:50 am
bueno aqui ta la solucion como se los dije fue como lo plantie pero agradesco al joven que me intento ayudar ^^

mcom()
descripcion:
bueno mcom es la respuesta para cargar interfaces en una pagina web, haber como lo explico bueno digamos que tengo un menu con los siguientes elementos.
-nuevo usuario.
-modificar usuario.
-ver usuario.
y asi tengo cientos de elementos en mi menu.

por tanto aquellos que me digan que por que no cargo todo al principio pues este de... imaginen que solo queria ver si un usario se conecto al sistema y tener que cargarme todos los js y css de cada uno de esas interfaces solo pa ver si se conecto el mentado usuario... seria una #######

bueno sin mas preambulos pongamos las cartas en la mesa.
existen los siguientes archivos y la tabla de mysql

servidor/contestadora.php
servidor/interfaces/nuevo_usuario/n_user.php
servidor/interfaces/nuevo_usuario/n_user.js
servidor/interfaces/nuevo_usuario/n_user.css
servidor/interfaces/mod_usuario/m_user.php
servidor/interfaces/mod_usuario/m_user.js
servidor/interfaces/mod_usuario/m_user.css

tabla interface
campos:
id,nombre,ruta,archivo(solo el nombre del archivo sin extension)
registros agregados:
1,'agregar un usuario',/interfaces/nuevo_usuario,'n_user'
2,'modificar un usuario',/interfaces/mod_usuario,'m_user'

Código :

function mcom(interface,documento,_target)
{
//extraemos las variables del documento estan en tipo hidden pa que no molesten al usuario
//es exclusivamente para mi proyecto xD pero si quieren pueden utilizar esos elementos
var user=document.getElementById("user");
var pass=document.getElementById("pass");

//la variable param carga los valores post para enviar usuario y contraseña para verificar.
var param='interface='+interface+'&documento='+documento+'&usuario='+user.value+'&passwd='+pass.value;

//nombre del archivo en el servidor que nos dira que documentos cargar
var arch="contestadora.php";

/*capa donde alojamos los resultados aqui se pone el clasico load. o si es un iframe vale lo que sea*/
 var capa=_target;
 
// mensajes que van a salir en la div donde se pondra el contenido
var error="<div  align='center'>Problemas en la conexion</div>";
var errorx="<div align='center'>Problemas desconocidos en la trasmision</div>";
var loading="div align='center'><img src='loader.gif'>cargando...<img></div>";

//conexion asincrona con el servidor enviando datos a ..... contestadora.php
ajax=nuevoAjax();
 
//creamos la conexion asincrona con el servidor
ajax.open("POST",arch+param,true);             

//verificamos el estado de la conexion
ajax.onreadystatechange=function() 
 {
 //escribimos el clasico cargando con el gif animado clasico lo chulo de ajax XD
 if (ajax.readyState==1)   {     document.getElementById(capa).innerHTML = loading;   }
 
 //ya llego la respuesta del servidor contestadora.php ha emitido su dictamen.
 if (ajax.readyState==4) 
   {
   //si logramos conectarnos y contestadora.php nos envio la info que querioamos todo ira bien
   if (ajax.status==200)
    {
   
   //cargamos la respuesta en la variable req
    var req=ajax.responseText;
   
   /*separamos la respuesta en un array, si lo se pude hacerlo con XML y darle mas gracia al 
   asunto..*/
   var ruta = req.split(",");
  
   /*yo  se que se pueden cargar css o js ccomo elementos en una pagina
   asi que si desean cargarse mas pues aqui anotenlos tipos y en la contestadora le ponen que 
   responda con esos tipos si asi quieren es asu gusto*/
   for (M=0;M<ruta.length;M++)
     {
   if (ruta[M].indexOf("js"))
   {
     importar('script','type,src','text/javascript,'+ruta[M]);
   }
   if (ruta[M].indexOf("css"))
   {
         importar('link',  'type,rel,href','text/css,stylesheet,'+ruta[M]);
   }
     }

   /*bueno ya cargue los archivos js y css pero de todos modos me falta cargar los elementos de 
   esa interfaz entonces volvemos a llamar asincronamente al servidor pero esta vez vamos a buscar 
   el archivo que queremos fijense que el usuario por mas que lea este js nunca sabra de que 
   demonios archivo php va a cargar XD jaja   por este motivo fue creado.*/
   var metodo=6;
   cargar(param,ruta[2],capa,metodo,loading,error,errorx);
   //con este metodo vuelvo a cargar el archivo php que contestadora.php me dijo que cargara.
  }
  else if(ajax.status==404){capa.innerHTML = error;}
  else                       {capa.innerHTML = errorx;}
  }
  }
  ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
  ajax.send(valores);
 }


bueno ufffff esa es la funcion mas cabrona.... pero ahi ta jejeje a no todavia falta la otra carga asincrona. bueno yo pongo esas 2 cargas asincronas por que yo las uso cada rato en mi doc ya no tengo mas cargadores asincronos solo esas 2 y puras funciones js y puros php.

siguiente funcion:

Código :

/*clasico chascarrillo pa crear la conexion asincrona no le muevan nada .... esta regla no es valida
en productos IE. esos pend"·~€¬3.
*/
function nuevoAjax(){
   var xmlhttp=false;
    try {
       xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
       try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
       } catch (E) {
          xmlhttp = false;
       }
     }

   if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
       xmlhttp = new XMLHttpRequest();
   }
   return xmlhttp;
}




siguiente funcion

Código :

//funcion para importar archivos
function importar(elemento,p,v)
 { 
   //creamos el tipo de documento
   var Elem = document.createElement(elemento); 
   //separamos los valores y los param en array
   var param = p.split(",");
   var value = v.split(",");
   
   //agregamos los parametros con valores al objeto creado
   for (i=0;i<param.length;i++)
   {
         Elem.setAttribute(param[i],value[i]); 
   }
   //agregamos el objeto al tag head.
   document.getElementsByTagName('head')[0].appendChild(Elem);

   //verificamos como es el estado del archivo
   Elem.onreadystatechange = function () 
   {
        if (Elem.readyState == 'complete') {
            alert('Archivo onreadystatechange fallo');
        }
    }
   
 } 


siguiente funcion

Código :

//Escrito: por Randy Abiel Cabrera Guillen.
//funcion para carga asincrona
function cargar(val,archivo,capa,metodo,Es,Er,Xr)
{
   /*
   Es= cadena de esperando.
   Er= cadena de error de existencia.
   Xr  cadena de otro tipo de error.
   */
   ajax=nuevoAjax();
   /*
   metodo 1= GET  y val es un formulario.
   metodo 2= POST y val es un formulario.
   metodo 3= GET  y val es una cadena de valores divido por ,.
   metodo 4= POST y val es una cadena de valores divido por ,.
   metodo 5= GET  y val es un unico valor.
   metodo 6= POST y val es un unico valor.
   */
   switch(metodo)
   {
      case 1:{
               var valores=valorForm(val);   
               ajax.open("GET",archivo+valores,true);
            break;}
         case 2:{
               var valores=valorForm(val);      
             ajax.open("POST",archivo+valores,true);             
            break;}
      case 3:{
               var valores=valorString(val);      
               ajax.open("GET",archivo+valores,true);
            break;}
      case 4:{
            var valores=valorString(val);
            ajax.open("POST",archivo+valores,true);             
            break;}      
      case 5:{
               ajax.open("GET",archivo+val,true);
            break;}
      case 6:{
             ajax.open("POST",archivo+val,true);             
            break;}      
   }
   ajax.onreadystatechange=function() 
            {
            //adjuntar el famoso loader.   
              if (ajax.readyState==1)   {     document.getElementById(capa).innerHTML = Es;   }
              //termina la solicitud al servidor
            if (ajax.readyState==4) {
               //la solicitud es exitosa
                  if  (ajax.status==200){
                  //aqui poner todo lo necesario.
                        document.getElementById(capa).innerHTML=ajax.responseText;
                   }
               //error en la precarga
                   else if(ajax.status==404){capa.innerHTML = Er;}
                  else                    {capa.innerHTML = Xr;}
                 }
             }
             if(metodo==2 || metodo==4 || metodo==6)
            {
                 ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                 ajax.send(valores);
             }
            else {
              ajax.send(null);
            }   
}


siguiente funcion

Código :

//Escrito: por Randy Abiel Cabrera Guillen.
//construccion de cadenas de valores para enviar al servidor via string
function valorString(val)
    {
      var valor = val.split(",");
       var valores="";   
      for (var i=0; i<valor.length;i++)
          { 
          valores=valores+"&"+valor[i];  
        }
   valores="?obj="+i+valores;
   return(valores);
   }

//Escrito: por Randy Abiel Cabrera Guillen.
//construccion de cadenas de valores para enviar al servidor via estructura de formulario(con o sin restriccion de objetos)
function valorForm(formulario,exc,tipos)
   {
   var form= document.getElementById(formulario);
   var valores="";
   var num=0;
   for ( i=0; i<form.elements.length;i++)
       {
      //si existe restriccion de campos a enviar al servidor
      if (exc   =="S")
      {
           if (tipos.indexOf(form.elements[i].type)!=-1)
                 {
                 //verificar valores del tipo texto
                    //concatenacion de valores
                 valores=valores+"&"+form.elements[i].name+"="+form.elements[i].value;
                   num++;
               }
      }
      else
      {
                 valores=valores+"&"+form.elements[i].name+"="+form.elements[i].value;
                   num++;
       }
    }
   valores="?obj="+num+valores;
   return(valores);
   }

estas ultimas eran 2 pero hacen lo mismo solo crean las cadenas para enviar valores por post o get.

bueno estos son solo las funciones js, faltan todavia los php.

contestadora.php

Código :

<?php
session_start();
require_once('conect.php');
if ($_POST['usuario']==$_SESSION['username'] && $_POST['passwd']==$_SESSION['password'])
 {
  //conectar con el servidor.
  $cn=@mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
  if (!$cn){$result='<div align="center" class="returnresp"> '.error000.' </div>';}
  //seleccionar la base de datos
  if(!@mysql_select_db(DB_NAME, $cn)){$result='<div align="center" class="returnresp"> '.error001.' </div>';}
  //realizar consulta
  $data=@mysql_query('select * from '.PREFIJO.'interfaces where id ="'.$_POST['interface'].'"',$cn);
  if(!$data){$result='<div align="center" class="returnresp"> '.error002.' </div>';}
  //verificar si existe el usuario y si el password es correcto.   
  if (mysql_num_rows($data)!=0)

   {
        $rw=mysql_fetch_array($data);
     $file=$rw['directorio'].'/'.$rw['archivo'];
      if (file_exists ('../'.$file.'.js')){echo $file.'.js,';}
     else {echo "none,";}
      if (file_exists ('../'.$file.'.css')){echo $file.'.css,';}
     else {echo "none,";}
      if (file_exists ('../'.$file.'.php')){echo $file.'.php,';}
     else {echo "none,";}
     echo'end';
   }

 }
else
 {
  echo "el usuario no concide";
 }
?>


el archivo conect.php bueno ese no se que decirles pero bueno ahi tiene que crear las variables
de conexion con el servidor mmm con el metodo define
por ejemplo

Código :

define('DB_HOST','189.168.43.4');
define('DB_USER','root'); //clasico no cambia
define('DB_PASSWORD','180485');//xd tambien un clasico poner su fecha de nac
define('DB_NAME,'base_de_datos');//jejeje no jueguen pongale bien el nombre


en este tipo de documentos tambien pueden agregar variables fijas que no cambian o
variables cargadas desde la base de datos para su uso del usuario siempre con valores fijos.


bueno y los otros docs. como son el js el php y css que se van a cargar es a gusto del cliente.

espero y les sirva.. si tienen dudas agreguenle comentarios jejeje si tienen mejoras tambien se aceptan.

yo estoy a favor del codigo reutilizable.[/code]

Por aprendice

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Ene 2008 02:55 pm

aprendice escribió:

[...]tener que cargarme todos los js y css de cada uno de esas interfaces solo pa ver si se conecto el mentado usuario... [...]
Definitivamente, no entiendo el problema.
Porque no soy capaz de entender cómo para ver si un user está conectado... haya que descargarse un solo .css o .js
:crap: :?

Si yo quisiera saber si un user está conectado... no se... escribiría su nombre en una tabla, y lo borraría a su salida. Para ver la lista de online... leería la lista de nombres en dicha tabla. ¿descargar css? ¿ein?

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox
Citar            
MensajeEscrito el 15 Ene 2008 08:29 pm
bueno lo que pasa es lo siguiente amigo yo solo puse un ejemplo.
ok tienes un sistema administrativo de contenido web(wordpress u otros por que los hay). pero claro imagina que tu sistema no se dedica unicamente a postear blogs y organizar los contenidos de los blogs etc.

si no que tu sistema se debe encargar de proporcionar todos los mecanismos a los usuarios para poder presentar su informacion con el publico. bueno entonces que pasa, me dirias que lo haga en delphi, C++, la suite de microsoft etc etc. bueno pero digamos que los jefes quieren que sea web. entonces debes de pensar como hacer que una aplicacion web paresca de escritorio. y la respuesta es:
Ajax+DOM+CSS+(JS or JSON)+(PHP or Perl o JSP or ASP)+(MYSQL or POSTGRESS o MSSQL+.+, ORACLE)
bueno esa es la formula condensada seria:

Conexion Asincrona cliente servidor.
Uso del DOM.
Lenguaje para el cliente(JS o JSON) => DOM necesita un lenguaje cliente para funcionar.
Lenguaje Servidor (PHP ASP JSP Pearl)
Separacion entre la presentacion y el contenido. (CSS)
Manejador de base de datos(Mysql, Mssql, Postgress, ORACLE).

y en base a esos elementos podras tener una web que nunca pesara mas de 64k.
¿como lograrlo?
cargar asincronamente lo que necesitas
y una vez cargado evitar que se vuelva a solicitar mediante DOM.

Por aprendice

4 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 15 Ene 2008 09:00 pm
No he entendido nada.
xD
Aún estoy en xHTML y CSS tradicional...
Se me escapa el fin de lo que tienes en mente.

Por El Oso Amoroso

Claber

1780 de clabLevel

6 tutoriales

 

Madrid, España, Europa, Eurasia, La Tierra, Sist.Solar, Vía Láctea, UNIVERSO

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.