Как проверить, выполняется ли запрос через AJAX в CodeIgniter?

Как проверить, является ли запрос AJAX? Я использую CodeIgniter. У меня есть ссылка, которая при нажатии на нее откроет всплывающее диалоговое окно, которое выполняется через ajax, который запрашивает имя контроллера login_window() .

CodeIgniter

 //Here is the controller name: function login_window(){ // request via ajax $this->load->view("login_window"); } 

JQuery

 //here is the jquery code: //I am using a jquery plugin FACEBOX $('a[rel*=dialog]').facebox(); <a href="http://localhost/codeigniter/login_window" rel="dialog">Login</a> 

Я хочу проверить, является ли это AJAX-запрос, а если нет, я перенаправляю их на главную страницу. поэтому нет доступа к странице, предназначенной только для запросов ajax.

Solutions Collecting From Web of "Как проверить, выполняется ли запрос через AJAX в CodeIgniter?"

Если вы используете библиотеку, которая отправляет заголовок X-Requested-With , вы можете сделать …

 if (strtolower(filter_input(INPUT_SERVER, 'HTTP_X_REQUESTED_WITH')) === 'xmlhttprequest') { // I'm AJAX! } 

Начиная с Codeigniter 2.0, он предпочитает использовать $this->input->is_ajax_request()

Я думаю, что вы в основном ищете, чтобы защитить ваш айакс-апи от доступа напрямую от пользователей. Вы хотите, чтобы пользователи имели доступ к ajax api при вызове вашего собственного кода (javascript и т. Д.), Но пользователям следует запретить доступ, если они попытаются напрямую нажать api.

Если вы все еще ищете идеальное решение (HTTP_X_REQUESTED_WITH не всегда надежна, так как ваша библиотека может не поддерживать это. Даже если это может быть отключено прокси-серверами, если пользователь стоит за ним), попробуйте использовать крошки для защиты вашего ajax api. Крошки используются для проверки потока, которые обеспечивают доступ пользователей к api через предварительно определенный / предварительно определенный поток, а не напрямую.

В Codeigniter мы можем использовать

 if(!$this->input->is_ajax_request()){ // check if request comes from an ajax redirect(site_url('home'),'refresh'); // if the request is not coming from an ajax redirect to home controller. } 

Вместо того, чтобы определить, был ли ваш запрос запросом ajax или нет (какой может быть любой HTTP-глагол – GET / POST / HEAD), вы можете попробовать и добавить / изменить маршруты к вашим routes.php для конкретной обработки этих сценариев.

В Yii вы просто проверяете

  if (Yii::app()->request->isAjaxRequest) 

Если вы используете jQuery или другую большую библиотеку javascript, она работает. Если вы выполняете пользовательские запросы, не забудьте установить X-Requested-With HTTP-заголовком в XMLHttpRequest .