Загрузка динамического содержимого AJAX в Fancybox

сценарий:

пользователь вставляет свой zip в поле ввода, и при нажатии волшебной кнопки он видит магазины, ближайшие к его местоположению. Я называю службу совершенно прекрасной и загружаю ее с некоторым AJAX-goodness. Все хорошо.

теперь, вместо того, чтобы вставлять результаты где-то на странице, Я хочу, чтобы он отображался в Fancybox. Я просто не могу заставить это работать.

JavaScript:

$('#button').on('click', function(){    
   // Function to build the URL edited out for simplicity       
   var nzData = '/url.com?Zip=8000 #module';

   $.fancybox({
      ajax: { 
         data: nzData
        }
    });
});

I ожидайте, что fancybox появится и покажет мне разметку из URL (nzData). Fancybox загружается, но вместо содержимого я получаю строку с надписью"запрошенный контент не может быть загружен. Пожалуйста, попробуйте позже.".

это не проблема с сервисом, поэтому я подозреваю, что это просто я что-то упускаю или насилую API Fancybox. Так что я делаю не так?

EDIT: я забыл упомянуть, я использую старую версию Fancybox (v1.3.4).

9 ответов


Я знаю, что это старый вопрос, но мне недавно пришлось иметь дело с чем-то подобным. Вот что я сделал, чтобы загрузить ajax в fancybox.

$('#button').on('click', function(){
    $.fancybox({
        width: 400,
        height: 400,
        autoSize: false,
        href: '/some/url-to-load',
        type: 'ajax'
    });
});

fancybox использует параметр "ajax", где вы можете передать свою конфигурацию (как описано в jQuery)

$("#button").click(function() {
    $.fancybox.open({
        href: "ajax.php",
        type: "ajax",
        ajax: {
            type: "POST",
            data: {
                temp: "tada"
            }
        }
    });
});

Если вы хотите загрузить url как ajax, вы должны установить тип -

$.fancybox({
  href : nzData,
  type : 'ajax'
});

Я закончил загрузку содержимого в скрытый контейнер на странице, а затем отображение этого содержимого в Fancybox.

$('#button').on('click', function(){    
   var nzData = '/url.com?Zip=8000 #module';

     $('#foo').load(nzData, function(){
       var foo = $('#foo').html(); 
       $.fancybox(foo);
    });

});

мне было интересно сделать то же самое. Я пришел к аналогичному решению, однако оно отличается от любых других, рекомендованных здесь. После просмотра документации для обоих API это должно работать в V1 или V2.

$('#button').on('click', function(){    
    $('#foo').load('/content.html', function(){

        var $source = $(this);

        $.fancybox({
            content: $source,
            width: 550,
            title: 'Your Title',
            etc...
        });
    });
});

затем ваш контейнер для данных.

<div id="foo" style="display: none;"></div>

попробуй:

$.fancybox({
  type: 'ajax',
  ajax: { 
     url: nzData
    }
});

Если вы хотите, чтобы отобразить nzData внутри fancybox, затем используйте

$.fancybox(nzData,{
 // fancybox options
});

https://stackoverflow.com/a/10546683/955745

<a href="mypage.html #my_id" class="fancybox fancybox.ajax">Load ajax</a>
$(".fancybox").fancybox();

вот как я это сделал:

вам понадобится три элемента:

1) вам нужен div, который служит контейнером для fancybox, назовем его #fancycontainer

2)#fancylink является скрытым <a> С href в fancybox div(в этом случае href="#fancycontainer")

3)#button-это кликабельный элемент, который загружает все.

добавьте следующий код в функцию onload:

$('#fancynlink').fancybox();

$('#button').click(function(){
  $.ajax({
    //OPTIONS...
    //..........
    success: function(data){
      //Here goes the code that fills the fancybox div
      $('#fancycontainer').append(blablabla.....);
      //And this launches the fancybox after everything has loaded
      $('#fancylink').trigger('click');
    }
});

надеюсь, это поможет кому-то