2010-08-16 1 views
1

Вот моя ситуация:Как jquery и ajax идут вместе?

У меня есть страница, однажды нажимая на один из ее divs, запрос ajax выводит больше контента на страницу.

Больше контента, о котором я говорю, является содержимым галереи изображений, в которой используется jQuery. моя проблема в том, что как только я получаю ответ от запроса ajax, я манипулирую DOM. поэтому функция jquery ready() больше не доступна для меня (или она?) , чтобы пропустить проблему, я назначил функцию $.fn под названием InitGallery.

Используя eval, я могу позвонить ему, как только мой ответ на ajax придет, и все в порядке, за исключением одной маленькой синхронизации вопросов!

Как только i eval мой код $.fn.InitGallery, манипулируемый DOM не обязательно полностью загружен, и поэтому моя InitGallery терпит неудачу.

Как только я добавляю спать или предупреждаю о своем коде, и убедитесь, что функция InitGallery запускается после того, как DOM готов снова, это нормально и работает.

Я думаю, мой вопрос в том, как я могу назначить готовую функцию для DOM? как я могу удостовериться, что функция, которую я вызываю после ответа ajax, вызывается только после того, как изменения, сделанные с помощью ответа ajax на DOM, были готовы? спасибо

+0

Плохо отформатированный и плохой заголовок на вопрос, но интересный, тем не менее. +1 –

ответ

0

положил вызов вашей функции init в обработчик успеха вашего запроса ajax.

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
    makeYourChanges(); 
    callYourInit(); 

    } 
}); 
1

Мне нужно больше информации, но мой предварительный ответ:

Независимо загружает ваше содержание Аякс должен вызвать «готовое» событие или что-то похожее на новом содержании делаются загрузкой. Таким образом, вы можете привязать свою InitGallery к «готовому» к этому элементу и выполнить всю вашу инициализацию после того, как dom будет готов.

Что загружает ваш контент через AJAX?

+0

ну, просто глупая функция, которую я написал. Я думаю, что я изменю его, чтобы работать с каркасом jquery ajax. согласно другой ответ я получил: $ .ajax ({ URL: 'Аякса/test.html', успех: функция (данные) { makeYourChanges(); callYourInit(); } }); должен работать. есть ли у вас какие-либо мысли по этому вопросу? – Oded

+0

'callYourInit()' может быть не таким простым, как кажется. Где скрипт, который имеет функцию для загруженного содержимого ajax, находится ли он в содержимом или уже включен? –

3

У вас есть пара вариантов в зависимости от того, что вы пытаетесь сделать.

Если вы используете функцию live, вы можете подключать свои события один раз, и они будут продолжать работать после того, как вы изменили DOM.

Другой вариант поместить код инициализации в функции:

$(function() { 
    doCoolStuff(); 
}); 

Затем подключить к событию ajaxComplete или ajaxSuccess:

$.ajaxComplete(function() { 
    doCoolStuff(); 
}); 
+0

просто хочу указать, что у вас есть синтаксическая ошибка в вашем первом фрагменте –

+0

Спасибо, Боб - исправил его. –

0

Нет необходимости использовать ready() событие на документе снова для этого. готовое событие срабатывает только один раз, когда DOM изначально загружается.

Подход к этому назначению функции для свойства success объекта, который вы передаете на вызов ajax; Это функция, которую вы хотите выполнить после успешного завершения ответа от вызова.

$.ajax({ 
    url : 'http://some.url', 
    success : function(response) { 
     // do the insert into the DOM. An example 
     // assuming your response is text/html 
     $(document.body).append(response); 

     // now call InitGallery 
     $('#selector').InitGallery(); 
    } 
}); 
0

Я советую вам использовать инструменты для Ajax отладки как firebug или недавно firequery.

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