2011-08-04 9 views
5

c'è un modo per differenziare la chiamata ajax e la normale richiesta del browser in php (o codeigniter per essere specifici)?come differenziare la chiamata ajax e la richiesta browser in php (o codeigniter)?

questo è il mio jquery ajax chiamata:

$(document).ready(function() { 
    $('#container').load('http://localhost/index.php/customer/'); 
}); 

questo è il metodo indice del controller di cliente in CodeIgniter:

public function index() { 
    //if (call == 'ajax request') 
    // do this if it's an ajax request; 
    //else 
    // do that if user directly type the link in the address bar; 
    $this->load->view('customer/listview'); 
} 

qualsiasi aiuto sarebbe apprezzato. Grazie.

risposta

5

modo CodeIgniter ..

$this->input->is_ajax_request() 
+0

wow, funziona. Credo di non aver letto a fondo la classe di input. grazie mille. – dqiu

3
function getIsAjaxRequest() 
{ 
    return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest'; 
} 

Definire questa funzione da qualche parte poi, naturalmente, usare in questo modo:

if (getIsAjaxRequest()) 
// do this 
else 
// do that 

Ma ci potrebbe essere una cosa già in CodeIgniter implementata, solo ricerca globale di HTTP_X_REQUESTED_WITH

+0

è $ this-> input-> is_ajax_request() in codeigniter. ma è l'esperienza +1 per vedere come funziona effettivamente il metodo. Grazie. – dqiu

1
if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {} 

Dovrebbe fai quello che ti serve. Anche se può ovviamente essere simulato come qualsiasi altro HTTP Header, quindi non fare affidamento su di esso per qualcosa di importante.

0

Questa è l'implementazione di questa funzionalità di Codeigniter.

if($this->input->isAjax()) { 

     } 
0

Invece di basarsi su variabili del server, che potrebbero essere modificate per esempio. se il server è dietro un proxy inverso, faccio tutte le mie chiamate AJAX attraverso una singola funzione javascript in cui aggiungo una variabile POST: isajax. Poi lo controllo usando qualcosa come $ this-> UI-> IsAJAX() che cerca una variabile inizializzata durante l'impostazione del controller.

$this->_isAJAX = (empty($_POST['isajax']) ? true : false. 
+0

La mia risposta è utile se non si utilizza un framework, non raccomanderei di scrivere le proprie funzioni per effettuare chiamate AJAX e impostare le variabili POST (oltre alla logica dell'applicazione ovviamente). – Ravi

Problemi correlati