2011-08-04 1 views
5

Есть ли способ дифференцировать вызов ajax и обычный запрос браузера в php (или конкретный код)?как дифференцировать вызов ajax и запрос браузера в php (или codeigniter)?

это мой JQuery Ajax вызов:

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

это индексный метод контроллера клиента в 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'); 
} 

любая помощь будет оценена. Благодарю.

ответ

5

CodeIgniter способ ..

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

ничего себе, это работает. Думаю, я не прочитал класс ввода полностью. Спасибо большое. – dqiu

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

Определите эту функцию где-то, конечно, использовать его как это:

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

Но может быть такой, что уже в CodeIgniter реализована, только глобальный поиск HTTP_X_REQUESTED_WITH

+0

это $ this-> input-> is_ajax_request() в codeigniter. но это +1 опыт, чтобы увидеть, как работает метод. Благодарю. – dqiu

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

В случае, если делай то, что тебе нужно. Хотя это, очевидно, можно подделать, как и любой другой HTTP-заголовок, поэтому не полагайтесь на него ни на что большее.

0

Это реализация этой функции Codeigniter.

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

     } 
0

Вместо того, чтобы полагаться на серверные переменные, которые могли бы быть изменены, например. если сервер находится за обратным прокси-сервером, я выполняю все мои вызовы AJAX через одну функцию javascript, в которую я добавляю переменную POST: isajax. Затем я проверяю его, используя что-то вроде $ this-> UI-> IsAJAX(), которое ищет переменную, которая была инициализирована при настройке контроллера.

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

Мой ответ полезен, если вы не используете фреймворк, я бы не рекомендовал писать ваши собственные функции для создания AJAX-вызовов и установки переменных POST (за исключением прикладной логики, конечно). – Ravi

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