Ich denke, um Ihre Frage unter diesem Formular richtig zu interpretieren: "OK, ich bin bereits mit all dem Ajax-Zeug fertig; ich möchte nur wissen, ob die JavaScript-Funktion, die mein Ajax-Rückruf in den DIV eingefügt hat, von diesem Moment an jederzeit aufrufbar ist , das heißt, ich möchte es nicht kontextuell zur Rückrufrückgabe aufrufen ".
OK, wenn Sie so etwas meinen, lautet die Antwort "Ja". Sie können Ihren neuen Code jederzeit während der Seitenpersistenz im Browser unter den folgenden Bedingungen aufrufen:
1) Ihr vom Ajax-Rückruf zurückgegebener JavaScript-Code muss syntaktisch in Ordnung sein.
2) Selbst wenn Ihre Funktionsdeklaration in einen <script>
Block innerhalb eines vorhandenen <div>
Elements eingefügt wird, weiß der Browser nicht, dass die neue Funktion vorhanden ist, da der Deklarationscode nie ausgeführt wurde. Sie müssen also eval()
Ihren Deklarationscode vom Ajax-Rückruf zurückgeben, um Ihre neue Funktion effektiv deklarieren zu können und sie während der gesamten Lebensdauer der Seite verfügbar zu haben.
Auch wenn dieser Code ziemlich dumm ist, erklärt er die Idee:
<html>
<body>
<div id="div1">
</div>
<div id="div2">
<input type="button" value="Go!" onclick="go()" />
</div>
<script type="text/javascript">
var newsc = '<script id="sc1" type="text/javascript">function go() { alert("GO!") }<\/script>';
var e = document.getElementById('div1');
e.innerHTML = newsc;
eval(document.getElementById('sc1').innerHTML);
</script>
</body>
</html>
Ich habe Ajax nicht verwendet, aber das Konzept ist das gleiche (auch wenn das Beispiel, das ich ausgewählt habe, sicher nicht sehr klug ist :-)
Im Allgemeinen stelle ich Ihr Lösungsdesign nicht in Frage, dh ob es mehr oder weniger angemessen ist, die Funktion in einer separaten .js-Datei und dergleichen zu externalisieren + zu verallgemeinern. Beachten Sie jedoch, dass eine solche Lösung weitere Probleme aufwerfen kann, insbesondere wenn Ihre Ajax-Aufrufe sollten wiederholt werden, dh wenn sich der Kontext derselben Funktion ändern sollte oder wenn die Persistenz der deklarierten Funktion betroffen sein sollte. Daher sollten Sie möglicherweise ernsthaft in Betracht ziehen, Ihr Design in eines der vorgeschlagenen Beispiele in diesem Thread zu ändern.
Wenn ich Ihre Frage falsch verstanden habe und Sie über den kontextbezogenen Aufruf der Funktion sprechen, wenn Ihr Ajax-Rückruf zurückkehrt, möchte ich den von krosenvold beschriebenen Prototyp-Ansatz vorschlagen , da er browserübergreifend, getestet und voll funktionsfähig ist. Dies kann Ihnen eine bessere Roadmap für zukünftige Implementierungen geben.