Вызов функции jQuery внутри html возврата из вызова AJAX
Я работаю над веб-страницей, использующей jQuery. У меня есть вызов Ajax, который получает данные с сервера и обновляет div. Внутри этих данных есть функция jQuery, но функция не вызывается после того, как данные загружаются на страницу. У меня уже есть соответствующие js файлы, включенные в страницу.
Это то, что возвращается из вызова Ajax и помещается в div:
<script type="text/javascript">
$(function() {
$('input').myFunction('param');
});
</script>
<p> other html </p>
Как получить возвращенный javascript для запуска после того, как html будет вставлен на страницу?
(Я использую Rails с плагином jRails)
Ответы
Ответ 1
Если вам нужна оценка JavaScript-тега, с содержимым html, вы должны установить опцию dataType для вызова ajax на "html":
$.ajax({
type: "GET",
url: "yourPage.htm",
dataType: "html"
});
Или dataType "script", если вы хотите загрузить и выполнить файл .js:
$.ajax({
type: "GET",
url: "test.js",
dataType: "script"
});
подробнее здесь: Ajax/jQuery.ajax
Ответ 2
У меня была аналогичная проблема, когда я хотел добавить небольшие сборщики дат в пару полей, которые я извлекал с помощью ajax. вот что я сделал, чтобы обойти это... просто быстро и грязно. Вместо того, чтобы вернуть весь этот блок из моего вызова ajax:
<script type="text/javascript">
$(function() {
$('input').myFunction('param');
});
</script>
<p> other html </p>
Я бы вернул это (обратите внимание на составленный | x | разделитель)
$(function() {
$('input').myFunction('param');
});
|x|
<p> other html </p>
Затем, когда я получил данные обратно через ajax, я разделил возвращаемое значение на 2 части: javascript, который должен быть выполнен, и html для отображения:
r = returnvalfromajax.split("|x|");
document.getElementById('whatever').innerHTML = r[1];
eval(r[0]);
Ответ 3
Изменение
<script type="text/javascript">
...
</script>
To:
<script>
...
</script>
Исправлена проблема для меня.
Ответ 4
Ну, вы можете использовать функцию jQuery load(): http://docs.jquery.com/Ajax/load#urldatacallback
В качестве обратного вызова вы можете определить функцию, которая будет выполнена после загрузки нового содержимого
Пример:
$( "# feeds" ). load ( "new_content.html", doSomething());
а в new_content.html вы можете определить функцию doSomething()...
Ответ 5
для ajax.net решение endRequestHandler(sender, args)
отлично работает, хотя
Ответ 6
Вы пробовали метод Sys.WebForms.PageRequestManager.add_endRequest?
$(document).ready(function()
{
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);
}
);
function endRequestHandler(sender, args)
{
// whatever
}