2012-01-11 3 views
1

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

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

Похоже, что скрипт поиска загружается до 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> 

ответ

0

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

EDIT

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

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

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

вы можете сделать это намного проще после Append

container.append(justTable); 
callSearchFunction(); 
+0

Я пытаюсь интерпретировать, что это значит , Я должен сначала вызвать '.ready()', затем AJAX, а затем поиск будет загружаться после загрузки AJAX? – Charlie

+0

Это означает, что если вы вызываете функцию .ready() в скрипте внутри тела, тогда он запускается мгновенно и должен запускаться из головы. –

+0

Оба сценария в голове. – Charlie

11

Не уверен, что я действительно понял вопрос, но загрузить сценарий после того, как содержимое загружается с помощью 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

Какую часть вы не получите? Я хочу уточнить ответ, чтобы быть более ясным: D – Charlie

+0

Кроме того, чтобы добавить это. Я не получаю контент с локальной страницы. Это передает URL-адрес YQL, а затем получает содержимое страницы, отправленное назад и лишенное всего, кроме тегов таблицы. Я не уверен, что хотел бы использовать синтаксис, поскольку это просто запрос 'ajax', если это имеет смысл. – Charlie

0
$('.container').load('yourPage.html',function(){   
    //Do whatever you want here    
}); 

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

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

Эта функция будет выполнять, когда Ajax запрос полный

Смежные вопросы