Загружать скрипты после того, как AJAX загружает контент? - PullRequest
1 голос
/ 11 января 2012

Я использую jQuery и YQL для получения содержимого веб-сайта и отображения определенного элемента на странице, в данном случае, элемента table.У меня также есть функция поиска, настроенная с помощью плагина jQuery QuickSearch .

Это прекрасно работает, и теперь проблема ...

Похоже, что поисковый скрипт загружается до того, как получатель контента AJAX получит контент.Я думаю, что сценарий затем кэширует данные, чтобы их было легче искать.Поскольку он загружается после того, как контент есть, он ничего не ищет и не работает.Есть ли способ загрузить поисковый скрипт ПОСЛЕ загружен контент AJAX?

Я уже пытался вызвать его с помощью функции ready в jQ:

$(document).ready(function() {

Но он все еще загружается до загрузки контента.Мой AJAX скрипт ниже:

<script type="text/javascript">
    $(document).ready(function () {
        var container = $('#content');
        function doAjax(url) {
            if (url.match('^http')) {
                $.getJSON("http://query.yahooapis.com/v1/public/yql?"+
                    "q=select%20*%20from%20html%20where%20url%3D%22"+
                    encodeURIComponent(url)+
                    "%22&format=xml'&callback=?", 
                function (data) {
                    if (data.results[0]) {
                        var fullResponse = $(filterData(data.results[0])),
                            justTable = fullResponse.find("table");
                        container.append(justTable);
                    } else {
                        var errormsg = '<p>Error: could not load the page.</p>';
                        container.html(errormsg);
                    }
                });
            } else {
                $('#content').load(url);
            }
        }
        function filterData(data) {
            data = data.replace(/<?\/body[^>]*>/g, '');
            data = data.replace(/[\r|\n]+/g, '');
            data = data.replace(/<--[\S\s]*?-->/g, '');
            data = data.replace(/<noscript[^>]*>[\S\s]*?<\/noscript>/g, '');
            data = data.replace(/<script[^>]*>[\S\s]*?<\/script>/g, '');
            data = data.replace(/<script.*\/>/, '');
            data = data.replace(/<img[^>]*>/g, '');
            return data;
        }
        doAjax('url_goes_here');
});
</script>

Ответы [ 3 ]

12 голосов
/ 11 января 2012

Не уверен, что я действительно получаю вопрос, но чтобы загрузить скрипт после загрузки контента с помощью Ajax, вы можете сделать что-то вроде этого:

$.ajax({
  url: url,
  data: data,
  success: function() {
     //success loading content
  },
  error: function() {
    //error loading content
  },
  complete: function() {
     $.getScript("/scripts/mysearchscript.js", function() {
          alert('loaded script and content');
     });
  }
});
0 голосов
/ 25 марта 2014
$('.container').load('yourPage.html',function(){          
    //Do whatever you want here              
});

Вы можете передать анонимную функцию, такую ​​как параметр, в метод jquery .load ()

http://api.jquery.com/load/

Эта функция будет выполняться после завершения запроса ajax

0 голосов
/ 11 января 2012

"Если .ready () вызывается после инициализации DOM, новый переданный обработчик будет выполнен немедленно." - http://api.jquery.com/ready/

EDIT

Думаю, я неправильно понял ваш вопрос, извините. Вы говорите, что поиск пытается выполнить поиск до полной загрузки таблицы? Я думал, что вы пытаетесь выполнить поиск до того, как страница полностью загрузится. Вы пытались использовать функцию обратного вызова, прикрепленную к вашему .load (), или сразу после container.append ()?

после загрузки

$('#content').load(url,callSearchFunction());

Вы можете сделать это намного проще после добавления

 container.append(justTable);
 callSearchFunction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...