2013-02-20 2 views
19

Sto cercando di avere i miei modale bootstrap recuperare i dati utilizzando AJAX:Carica contenuto con l'Ajax nel modale bootstrap

<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> 

mio modale:

<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> 

Quando clicco sul link, il modale è mostrato ma il corpo è vuoto. Inoltre, non vedo alcuna richiesta di ajax fatta. Sto usando Bootstrap 2.1.1

Cosa sto facendo male?

risposta

21

Ecco come ho risolto il problema, potrebbe essere utile ad alcuni:

Ajax modale non sembra essere disponibile con boostrap 2.1.1

così ho finito per la codifica io:

$('[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(); 
    }); 
}); 

Esempio di un collegamento che chiama un modale:

<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> 

ora inviare il che Le modal markup attraverso ajax.

crediti verso drewjoh

+8

Ciò creerà una nuova modal nel DOM ogni volta. Preferirei avere il contenitore modale nella pagina e sostituirlo con JS. per esempio. $ ("# ModalContainer") html (i dati).; $ ("# ModalContainer") modali().; – Yashvit

+1

Ho dovuto aggiungerlo alla pagina e quindi chiamare l'id che ritorna in una modal. Facendo '$ (data) .modal()' la modale ha funzionato ma era superflag. –

27

facilmente fatto in Bootstrap 3 in questo modo:

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

Disponibile anche in 2.3.2 con la stessa sintassi. – Arkan

+0

Puoi dare un esempio della risposta attesa quando chiami "remote.html"? – yas4891

+1

@ yas4891 assicurati che ci sia un div con l'id specificato in 'data-target'. Il contenuto di 'remote.html' dovrebbe essere caricato in questo div come nell'esempio [bootstrap] (http://getbootstrap.com/javascript/#modals). –

37

La Top Votati risposta è deprecated in Bootstrap 3.3 and will be removed in v4. Prova a modificare:

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 (Basato su the official example Si noti che per Bootstrap 3. * impostiamo data-remote="false" per disabilitare la funzione di caricamento Bootstrap deprecato.):

<!-- 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 da solo: https://jsfiddle.net/ednon5d1/

+0

Non è la risposta accettata;) –

+1

Ho una pagina che elenca centinaia di record di ordini che hanno tutti bisogno di caricare il contenuto in un modale usando la richiesta AJAX. Questo metodo carica il mio primo clic su cui è stato fatto clic, ma dopo continua a mostrare modale con i precedenti caricati dati invece di fare una nuova richiesta AJAX da aggiornare con un nuovo clic su disco. Qualsiasi id? – JasonDavis

+0

La modale è ancora aperta quando si fa clic su uno degli altri link? Questo gestore javascript attiva la richiesta quando viene visualizzata la modale. ad esempio, è necessario riscriverlo e utilizzare un gestore di clic, ad esempio – marcovtwout