2013-03-01 5 views
5

Ho una chiamata ajax da javascript a un metodo in un controller, il metodo nel controller dovrebbe caricare una vista (come, mostrare una nuova pagina sullo schermo), Anche se tutto sembra ok, la nuova vista non sembra caricarsi sullo schermo. Non posso usare header o windows.location perché sto passando una variabile array, contenente i dati da usare nella vista.caricamento di una vista dopo una chiamata Ajax, CodeIgniter

La pagina è visibile nella scheda Rete (sottoscheda di anteprima, selezionando l'ajax) della console di debug di Chrome. Ma lo schermo principale rimane così com'è.

Se qualcuno ha affrontato un problema simile o ha una soluzione, per favore aiutatemi.

Grazie !!

+0

Stai cercando di modificare l'intero contenuto dello schermo o solo il contenuto all'interno di un ele ment? – Brendan

+0

sto provando a cambiare l'intero contenuto, caricare una nuova nuova vista – Archer

+0

Non sono sicuro del motivo per cui stai usando ajax allora. Perché non ti colleghi semplicemente al controller/metodo? – Brendan

risposta

7

Ok, ecco cosa stai facendo male.

quando si richiede la pagina utilizzando ajax non si restituisce quella pagina.

quando si utilizza $ this-> load-> view ('pagename', $ datapassed); carica la vista e questo è il motivo per cui non vedi nulla.

Quello che devi fare è usare

$data=$this->load->view('pagename',$datapassed, TRUE); 

quello che farà è che tornerà quella pagina e salvarla in $ data dopo che è possibile stamparlo utilizzando

$this->set_output($data); 

e ricevere questo risultato in ajax e caricarlo in un div.

e se si desidera aggiornare l'intera pagina è possibile utilizzare

$(body).html(result); 

Dovete capire che è necessario inviare la pagina HTML fornendo che terzo parametro nella visualizzazione del carico.

+0

Grazie mille !! – Archer

+0

ya questo mi ha davvero aiutato ma invece di '$ this-> set_output ($ data)' ho fatto direttamente eco alla variabile 'echo $ data' e ha funzionato per me. Grazie per il concetto – Dipen

+0

'$ this-> output-> set_output ($ data);' funziona per me. Non so se lo hanno aggiornato, ma sto usando CodeIgniter versione 3.0.4. –

3

In classe controller

function get_view_ajax() 
{ 
    $data['username] = $_POST['username]; 
    $response = $this->load->view('radius/radius_corporate_graph',$data,TRUE); 
    echo $response; 
} 

Nel file di vista in cui si avvia ajax chiamata

$('#button').click(function(){ 
var username = $('#username').val(); 

$.ajax({ 
    type:'POST', 
    url:"<?php echo base_url(); ?>controller_name/get_view_ajax/", 
    data: "username="+username, 
    success:function(msg){ 
    $("#div_result").html(msg); 
    }, 
    error: function(result) 
    { 
     $("#div_result").html("Error"); 
    }, 
    fail:(function(status) { 
     $("#div_result").html("Fail"); 
    }), 
    beforeSend:function(d){ 
    $('#div_result').html("<center><strong style='color:red'>Please Wait...<br><img height='25' width='120' src='<?php echo base_url();?>img/ajax-loader.gif' /></strong></center>"); 
    } 

    }); 
}); 

<div id="div_result"> 
<a href="#" id="button">Click here </a> 

Un altro file al fine di essere caricati sulla funzione di controllo (extra_info.php) come refered sulla funzione get_view_ajax

<h1>This page is called from ajax function </h1>