2013-02-20 2 views
19

Я пытаюсь, чтобы мой бутстраповские модальное извлечение данных с помощью Ajax:Загрузка содержимого с помощью AJAX в начальной загрузке модального

<a href="{{ path('ajax_get_messages', { 'superCategoryID': 35, 'sex': sex }) }}" data-toggle="modal" data-target="#birthday-modal"> 
    <img src="{{ asset('bundles/yopyourownpoet/images/messageCategories/BirthdaysAnniversaries.png') }}" alt="Birthdays" height="120" width="109"/> 
</a> 

Моего модальный:

<div id="birthday-modal" class="modal hide fade"> 
<div class="modal-header"> 
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> 
    <h3>Birthdays and Anniversaries</h3> 
</div> 
<div class="modal-body"> 

</div> 
<div class="modal-footer"> 
    <a href="#" data-dismiss="modal" class="btn">Close</a> 
    {#<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>#} 
</div> 
</div> 

Когда я нажимаю на ссылку, модальный является но тело пусто. Кроме того, я не вижу никакого запроса ajax. Я использую Bootstrap 2.1.1

Что я делаю неправильно?

ответ

21

Вот как я решил эту проблему, может быть полезным для некоторых:

Ajax модальное, кажется, не будет доступен с boostrap 2.1.1

Так что я в конечном итоге кодирования это сам:

$('[data-toggle="modal"]').click(function(e) { 
    e.preventDefault(); 
    var url = $(this).attr('href'); 
    //var modal_id = $(this).attr('data-target'); 
    $.get(url, function(data) { 
     $(data).modal(); 
    }); 
}); 

Пример ссылки, который вызывает модальность:

<a href="{{ path('ajax_get_messages', { 'superCategoryID': 6, 'sex': sex }) }}" data-toggle="modal"> 
    <img src="{{ asset('bundles/yopyourownpoet/images/messageCategories/BirthdaysAnniversaries.png') }}" alt="Birthdays" height="120" width="109"/> 
</a> 

Я теперь посылаю ВОЗ le модальная разметка через ajax.

Кредиты drewjoh

+8

Это создаст новый модальный в DOM каждый раз. Я предпочел бы иметь модальный контейнер на странице и заменить его содержимое с помощью JS. например. $ ("# ModalContainer") HTML (данные). $ ("# ModalContainer") модальный(). – Yashvit

+1

Мне пришлось добавить его на страницу, а затем вызвать идентификатор, который возвращается в модальный. Делая '$ (data) .modal()' modal работал, но он был супер лагги. –

27

легко сделать в Bootstrap 3 вот так:

<a data-toggle="modal" href="remote.html" data-target="#modal">Click me</a> 
+1

Также доступен в 2.3.2 с тем же синтаксисом. – Arkan

+0

Не могли бы вы привести пример ожидаемого ответа при вызове «remote.html»? – yas4891

+1

@ yas4891 убедитесь, что существует div с идентификатором, указанным в 'data-target'. Содержимое 'remote.html' должно загружаться в этот div, как в примере [bootstrap] (http://getbootstrap.com/javascript/#modals). –

37

Верхний голосовавшие ответ является deprecated in Bootstrap 3.3 and will be removed in v4. Попробуйте вместо этого:

JavaScript:

// Fill modal with content from link href 
$("#myModal").on("show.bs.modal", function(e) { 
    var link = $(e.relatedTarget); 
    $(this).find(".modal-body").load(link.attr("href")); 
}); 

Html (на основе the official example Обратите внимание, что для Bootstrap 3. * мы устанавливаем data-remote="false" отключить устаревшую функцию загрузки Bootstrap.):

<!-- Link trigger modal --> 
<a href="remoteContent.html" data-remote="false" data-toggle="modal" data-target="#myModal" class="btn btn-default"> 
    Launch Modal 
</a> 

<!-- Default bootstrap modal example --> 
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-dialog"> 
    <div class="modal-content"> 
     <div class="modal-header"> 
     <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
     <h4 class="modal-title" id="myModalLabel">Modal title</h4> 
     </div> 
     <div class="modal-body"> 
     ... 
     </div> 
     <div class="modal-footer"> 
     <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
     <button type="button" class="btn btn-primary">Save changes</button> 
     </div> 
    </div> 
    </div> 
</div> 

Try это самостоятельно: https://jsfiddle.net/ednon5d1/

+0

Это не принятый ответ;) –

+1

У меня есть страница, в которой перечисляются сотни записей заказов, которые все должны загружать контент в Modal с помощью запроса AJAX. Этот метод загружает мою первую запись, но после этого она просто продолжает показывать модальную с предыдущей загрузкой данные вместо того, чтобы новый запрос AJAX обновляться с новым кликом по записи. Любой ides? – JasonDavis

+0

Мод ли все еще открыт, когда вы нажимаете одну из других ссылок? Этот обработчик javascript запускает запрос, когда модален показан. В вашем случае вы можете необходимо переписать его и использовать обработчик кликов, например. – marcovtwout

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