Подтвердить что ты не робот

Вызов функции 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)

4b9b3361

Ответ 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
    }