Pregunta

Tengo esta página de muestra:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Ajax Page</title>
<script type="text/javascript">
function ajax_hello() {
    alert ("hello");    
}
alert ("Hello from JS");
</script>
</head>

<body>
This is the Ajax page.
<a href='#' onclick='ajax_hello();'>Click here to fire off JS function</a>.
</body>
</html>

Lo llamo con esto:

new Ajax.Updater($(element), page, { method: "get", evalScripts: true });

La alerta se está ejecutando, pero la función no se está registrando (ajax_hello ()).

¿Hay alguna manera de hacer que ajax registre una función de JavaScript en la página de llamada?

¿Fue útil?

Solución

En respuesta al comentario, examiné la documentación y parece que hay Hay algunas reglas especiales para Prototype cuando los scripts son evaluados por el actualizador. Los scripts pueden estar en cualquier parte de la respuesta, pero necesita asignar cualquier definición de función a una variable global para que esté disponible en su página.

  

Acerca de evalScripts y definición   funciones Si usa evalScripts:   cierto, cualquier bloque será   evaluado. Esto no significa que lo hará   ser incluido en la página: no lo harán.   Su contenido simplemente se pasará a   la función nativa eval (). Existen   dos consecuencias para esto:

     

El alcance local será el de   Procesamiento interno del prototipo   función. Cualquier cosa en tu guión   declarado con var será descartado   momentáneamente después de la evaluación, y al   cualquier tasa será invisible para el   resto de los guiones de la página. Si tu   definir funciones allí, necesita   en realidad crearlos, de lo contrario   no será accesible para el resto   de los guiones de la página. Eso es el   el siguiente código no funcionará:

// This kind of script won't work if processed by Ajax.Updater:
function coolFunc() {
    // Amazing stuff!
}
     

Tú   necesitará usar la siguiente sintaxis:

// This kind of script WILL work if processed by Ajax.Updater:
coolFunc = function() {
   // Amazing stuff!
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top