Home > Ajax, General, PHP, XAMPP > Detect AJAX Requests using the x-requested-with header and xmlhttprequest

Detect AJAX Requests using the x-requested-with header and xmlhttprequest

This is a small snippet of code I came across today, it allows a script to display different content based on how it was requested. This method allows your scripts to remain in a single file, handing both AJAX and normal requests – it avoids ending up with lots of small PHP files in your AJAX folder, that deals with ajax requests.Another use would be a page that has 2 web forms, one AJAX and one normal. You could keep the code for this page in a single file. This method is also useful for security purposes, as it would ensure that requests to your AJAX scripts are via AJAX only. It also has uses for writing unobtrusive JavaScript – maybe ensuring that an AJAX enabled web form would work when javascript is disbaled.

For example, the below code would display different code depending on if the request for the page was made via AJAX or directly via a browser.

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    //This is an AJAX request, do AJAX specific stuff
}
else {
    //This is not an AJAX request E.g. display normal page content.
}

In some code I was working on today, I saw a neater way of achieving the above, this would be included in your common config file:

define('IS_AJAX_REQUEST', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');

if(IS_AJAX_REQUEST) {
    //This is an AJAX request, do AJAX specific stuff
}
else {
    //This is not an AJAX request E.g. display normal page content.
}

There’s an HTTP variable set called HTTP_X_REQUESTED_WITH, which will is set to ‘XMLHttpRequest‘ if the request method is via AJAX. This is method is untested with JavaScript frameworks other than JQuery, so may not work (but I don’t see any reason at all why it wouldn’t!).

It’s also worth noting that not all web servers include this variable and sometimes omit this specific $_SERVER paramter. Use vardump($_SERVER) to check that the HTTP_X_REQUESTED_WITH is present.

Categories: Ajax, General, PHP, XAMPP Tags:
  1. March 26th, 2010 at 17:08 | #1

    I struggling to see real of use of this.

    I think it better practice using if ($_POST) {} instead.

    You article makes this increased complicated for me.

  2. March 26th, 2010 at 17:10 | #2

    The article above edescribes how to detect requests coming from an AJAX action directly. I could submit a form using POST or via AJAX. The header I suggest allows you to isolate each type of request seperately.

  3. March 26th, 2010 at 17:31 | #3

    Nice website and a cool trick :)
    One thing I did notice is you have an apostrophe in this line
    if(‘IS_AJAX_REQUEST) {
    which shouldn’t be there

    Regards

    Jay

  4. March 26th, 2010 at 18:29 | #4

    Cheers :)

    Edited that code now.

  1. No trackbacks yet.