2014-11-26 3 views
0

У меня есть PHP-скрипт (ajax.php), который загружает контент из MySQL db. Этот скрипт обновляет новый контент каждые N секунд через AJAX. Содержимое AJAX содержит три ссылки, из которых один должен архивировать строку в MySQL. Когда пользователь нажимает кнопку архива, я хочу открыть диалоговое окно jQueryUI, подтверждающее удаление. Отмена отмены отменяется, в то время как OK вызывает отправку AJAX для удаления строки из MySQL. Deleting row from table with modal form confirmation (jQuery UI)? - пример диалога, в котором я хочу сделать. Мне нужно это, чтобы работать вместе с ajax/refresh.jQueryUI modal подтверждает удаление строки, загруженной ajax

Из-за того, что сама ссылка загружается AJAX, я не могу запустить диалог (или скрипт удаления). Как загрузить скрипт диалога и выполнить отправку AJAX? Я пытаюсь использовать GlobalEval, но я не понимаю документацию. Примеры, которые я нашел, по-видимому, относятся только к настройке переменных. Следующий сценарий является то, что я пытаюсь строить из:

var id = $('.refreshN').data('id'); 
var table = $('.refreshN').data('table'); 
var rtime = $('.refreshN').data('time'); 
$('.refreshN').load('ajax.php?id='+id+'&table='+table).fadeIn("slow"); 

var autoLoad = setInterval(
function() 
{ 
    $('.refreshN').load('ajax.php?id='+id+'&table='+table).fadeIn(5000); 
    var script = $(function(){ 
     $('.modalLink').click(function() { 
      $('#dialog').dialog('open'); 
      return false; 
     }); 
    }); 
    eval(script); 
}, rtime); // refresh page every N seconds 

ответ

1

Определить переменную script с нормальной функцией яваскрипта и добавить () для его выполнения. Попробуйте это вместо вашего тока js:

var id = $('.refreshN').data('id'); 
var table = $('.refreshN').data('table'); 
var rtime = $('.refreshN').data('time'); 
$('.refreshN').load('ajax.php?id='+id+'&table='+table).fadeIn("slow"); 

var autoLoad = setInterval(
function() 
{ 
    $('.refreshN').load('ajax.php?id='+id+'&table='+table).fadeIn(5000); 
}, rtime); // refresh page every N seconds 

$(document).on('click','.modalLink',function(e){ 
    e.preventDefault(); 
    $('#dialog').dialog('open'); 
}) 
+0

Благодарим за отзыв. Я попробовал это, но все равно не повезло. Обновление прекрасно работает, но ссылка на архив по-прежнему соответствует стандартной HTML-ссылке без диалога. Я основываюсь на том, что я читал в другом месте, мне нужно вызвать скрипт диалога по ссылке после его загрузки, но я не совсем отслеживаю, как это сделать. – thebarless

+1

Aah ok, теперь я понимаю вашу проблему. Это потому, что прослушиватель событий больше не прослушивается после обновления AJAX. Запрос AJAX займет время, и событие привязки будет выполнено до того, как запрос AJAX будет готов. Это означает, что ваш 'click' bind будет пытаться привязываться, пока HTML еще не готов. Используйте 'document.on' для архивирования привязки динамического содержимого. Я обновил свой ответ. Попробуйте, я думаю, это решит вашу проблему. –