Frage

Ich habe diese Beispielseite:

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

Ich rufe es mit diesem:

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

Der Alarm läuft, aber die Funktion Registrierung ist nicht (ajax_hello ()).

Gibt es eine Möglichkeit Ajax zu bekommen eine Javascript-Funktion an die aufrufende Seite registrieren?

War es hilfreich?

Lösung

Als Reaktion auf den Kommentar, stieß ich auf der Dokumentation und es scheint, dass es sind einige spezielle Regeln für Prototype, wenn Scripts durch den Updater ausgewertet werden. Die Skripte können überall in der Antwort sein, und Sie müssen alle Funktionsdefinitionen zu einer globalen Variablen zugewiesen werden, um sie auf Ihre Seite zur Verfügung zu stellen.

  

Über evalScripts und definierende   Funktionen Wenn Sie evalScripts:   true, wird jeder Block sein   bewertet. Dies bedeutet nicht, es wird   erhalten in der Seite enthalten: sie werden nicht.   Ihr Inhalt wird einfach werden weitergegeben   die native Funktion eval (). Es gibt   zwei Folgen dies:

     

Der lokale Bereich wird sein, dass die   Prototype interne Verarbeitung   Funktion. Alles, was in Ihrem Skript   erklärt mit var wird verworfen   kurz nach der Auswertung, und bei   jedenfalls wird die unsichtbar   Rest der Seite Skripte. Wenn du   definieren Funktionen dort, müssen Sie   sie tatsächlich schaffen, sonst   wird nicht an den Rest zugänglich sein   der Seite Skripte. Das heißt, die   folgender Code wird nicht funktionieren:

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

Sie   müssen Sie die folgende Syntax verwenden:

// This kind of script WILL work if processed by Ajax.Updater:
coolFunc = function() {
   // Amazing stuff!
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top