Я думаю, что правильно интерпретировать ваш вопрос в этой форме: «Хорошо, я уже закончил со всеми вещами Ajax; я просто хотел бы знать, может ли функция JavaScript мой обратный вызов Ajax, вставленный в DIV, вызываться в любое время из в этот момент, то есть я не хочу вызывать его контекстно для возврата обратного вызова ".
ОК, если вы имеете в виду что-то вроде этого, ответ «да», вы можете вызывать новый код к этому моменту в любое время во время сохранения страницы в браузере при следующих условиях:
1) Ваш код JavaScript, возвращаемый обратным вызовом Ajax, должен быть синтаксически ОК;
2) Даже если объявление вашей функции вставлено в блок <script>
в существующем элементе <div>
, браузер не узнает, что новая функция существует, так как код объявления никогда не выполнялся. Итак, вы должны eval()
ваш код объявления, возвращаемый обратным вызовом Ajax, чтобы эффективно объявить вашу новую функцию и сделать ее доступной в течение всего времени жизни страницы.
Даже если этот код довольно глуп, этот код объясняет идею:
<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>
Я не использовал Ajax, но концепция та же самая (даже если выбранный мной пример не слишком умен: -)
Вообще говоря, я не подвергаю сомнению дизайн вашего решения, т. Е. Более или менее уместно экстернализировать + обобщать функцию в отдельном файле .js и т. П., Но учтите, что такое решение может вызвать дополнительные проблемы. особенно если ваши Ajax-вызовы должны повторяться, т. е. если контекст той же функции должен измениться, или в случае сохранения сохранности объявленной функции, поэтому, возможно, вам следует серьезно подумать об изменении своего дизайна на один из предложенных примеров в этом потоке.
Наконец, если я неправильно понял ваш вопрос, а вы говорите о контекстном вызове функции, когда ваш обратный вызов Ajax возвращается, то я чувствую, что предлагаю прототипный подход , описанный krosenvold , поскольку он является кросс-браузерным, протестирован и полностью функционален, и это может дать вам лучшую дорожную карту для будущих реализаций.