Вызов функции jQuery внутри html возврата из вызова AJAX - PullRequest
20 голосов
/ 25 октября 2008

Я работаю над веб-страницей, использующей jQuery. У меня есть вызов Ajax, который получает данные с сервера и обновляет div. Внутри этих данных есть функция jQuery, но она не вызывается после загрузки данных на страницу. У меня уже есть нужные js-файлы, включенные в страницу.

Вот что возвращается из вызова Ajax и помещается в div:

<script type="text/javascript">
    $(function() {
         $('input').myFunction('param');             
    }); 
</script>
<p> other html </p>

Как заставить возвращенный JavaScript работать после вставки HTML на страницу?

(я использую Rails с плагином jRails)

Ответы [ 6 ]

27 голосов
/ 25 октября 2008

Если вы хотите оценить тег 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

7 голосов
/ 21 февраля 2009

У меня была похожая проблема, когда я хотел добавить маленькие указатели даты jquery в пару полей, которые я извлекал через 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]);
1 голос
/ 06 октября 2011

Изменение

<script type="text/javascript">
...
</script>

Кому:

<script>
...
</script>

Исправлена ​​проблема для меня.

0 голосов
/ 02 декабря 2009

для ajax.net решение endRequestHandler(sender, args) работает нормально, хотя

0 голосов
/ 17 июля 2009

Хорошо, вы можете использовать функцию load () jQuery: http://docs.jquery.com/Ajax/load#urldatacallback В качестве обратного вызова вы можете определить функцию, которая будет выполняться после загрузки нового контента. Пример:

$ ("# feeds"). Load ("new_content.html" ,, doSomething ());

и в new_content.html вы можете определить функцию doSomething () ...

0 голосов
/ 11 мая 2009

вы пробовали метод Sys.WebForms.PageRequestManager.add_endRequest?

    $(document).ready(function()
    {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);           
    }
    );
    function endRequestHandler(sender, args)
    {
        // whatever
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...