Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/01/2011, 14:59
Avatar de ecarlevaro
ecarlevaro
 
Fecha de Ingreso: octubre-2010
Ubicación: Paraná, Argentina
Mensajes: 80
Antigüedad: 13 años, 6 meses
Puntos: 13
Pregunta Respuesta: Php + Formulario + Xajax

Yo el otro día estuve peleando con el mismo problema, por eso lo tengo fresco en la cabeza.

Te debería funcionar igual, el include esté dentro o fuera de la función.
El manual de PHP lo deja claro,
"Cuando se incluye un archivo, el código que contiene hereda el ámbito de las variables de la línea en la cual ocurre la inclusión. Cualquier variable disponible en esa línea del archivo que hace el llamado, estará disponible en el archivo llamado, desde ese punto en adelante. Sin embargo, todas las funciones y clases definidas en el archivo incluido tienen el ámbito global.".

Yo acabo de probar este ejemplo (que tiene cosas de Smarty, que no importan):
Código PHP:
Ver original
  1. require_once("xajax/xajax_core/xajax.inc.php");
  2. include "funciones.php";
  3. $xajax = new xajax();                                                    
  4. $xajax->configure('javascript URI','xajax/');
  5. require "../smarty/libs/Smarty.class.php";
  6. $smarty = new Smarty;
  7. $smarty->template_dir = "../smarty/templates";
  8. $smarty->compile_dir = "../smarty/templates_c";
  9. $xajax->register(XAJAX_FUNCTION,"test");
  10. //Load the xajax js into a Smarty variable
  11. $smarty->assign("xajax_javascript",$xajax->getJavascript()); //Note: use get not print...
  12.  
  13. $xajax->processRequest();
  14.  
  15. //Simple xajax registered function
  16. function test()
  17. {
  18.  $resp=new xajaxResponse();  
  19.  $resp->alert("RESPUESTA:".suma());
  20.  return $resp;
  21. }

Y el archivo funciones.php que llamo solo tiene una función llamada suma que devuelve un número nada mas.
A mí me funciona bien, yo hago click en el vínculo (que está en el template de Smarty) y XAJAX llama a xajax_test() y test() llama a suma(), suma devuelve un número y test() lo envía a xajax.

Lo que me ha pasado es que llamo al enlace de MySQL ($enlace = mysql_connect...) que está en otro archivo PHP, desde la función y ahí no funciona porque "el código que contiene hereda el ámbito de las variables" debo antes declarar como global en la función a $enlace.
Código PHP:
Ver original
  1. function loca()
  2. {
  3.  global $enlace; //Declaro que $enlace es la variable $enlace que esta fuera de la función
  4.  //Ahora puedo usar $enlace como si fue declarada dentro de la funcion
  5.  return $enlce;
  6. }