2009-11-28 4 views
2

J'ai cette page d'exemple:Prototype Ajax.Updater Eval Javascript Fonctions

<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> 

J'appelle avec ceci:

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

L'alerte est en cours d'exécution, mais la fonction est de ne pas enregistrer (ajax_hello()).

Existe-t-il un moyen d'obtenir ajax pour enregistrer une fonction javascript à la page d'appel?

+1

Comment savez-vous qu'il n'a pas inscrit? Le navigateur émet-il une erreur lorsque vous cliquez sur le lien? –

Répondre

5

En réponse au commentaire, j'ai appuyé sur le documentation et il semble qu'il existe des règles spéciales pour Prototype lorsque les scripts sont évalués par le programme de mise à jour. Les scripts peuvent être n'importe où dans la réponse, , mais vous devez affecter des définitions de fonction à une variable globale pour les rendre disponibles sur votre page.

A propos evalScripts et définition fonctions Si vous utilisez evalScripts: vrai, un bloc sera évalué. Cela ne signifie pas qu'il sera inclus dans la page: ils ne le seront pas. Leur contenu sera simplement passé à la fonction native eval().

La portée locale sera celle de Fonction de traitement interne de Prototype. Quelque chose dans votre script déclaré avec var sera annulé momentanément après l'évaluation, et à tout taux sera invisible au reste des scripts de page. Si vous définir des fonctions là-dedans, vous devez en fait les créer, sinon ils ne seront pas accessibles au reste des scripts de page. Autrement dit, le code suivant ne fonctionnera pas:

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

Vous aurez besoin d'utiliser la syntaxe suivante:

// This kind of script WILL work if processed by Ajax.Updater: 
coolFunc = function() { 
    // Amazing stuff! 
} 
+0

Ensuite, expliquez "l'alerte est en cours d'exécution". –

+0

@Jonathan - il semble que ce soit géré différemment, mais il y a des considérations spéciales. J'ai mis à jour. – tvanfosson

+0

a du sens car cela annule les fonctions précédentes nommées coolFunc(). Merci! – OneNerd