告诉它是ajax还是非ajax

时间:2014-07-09 12:40:24

标签: javascript php ajax xmlhttprequest

PHP - 我测试了以下代码,但以下标题似乎并不发送它是javascript发送请求而不是非JavaScript用户

Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
AlexaToolbar-ALX_NS_PH:AlexaToolbar/alxg-3.2
Connection:keep-alive
Content-Length:146
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryA9tyz4BRlSglKAWC
Cookie:PHPSESSID=2dc90d7cfbcb6058d1ca02fd6144c3bf
Host:dev.r.com
Origin:http://dev.r.com
Referer:http://dev.r.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36

以下是我想用来判断是否ajax的代码

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
        if(!IS_AJAX)
        {
            die('Restricted access');
        }

这是我使用的javascript

function sendstatus(){

    var status = document.getElementsByName("status").value;
    var uri = "/statusupdate";
    var xhr = new XMLHttpRequest();
    var fd = new FormData();

    xhr.open("POST", uri, false);
    xhr.onreadystatechange = function()
    {
        if (xhr.readyState == 4 && xhr.status == 200)
        {
            var r = xhr.responseText;
            // Handle response.
            alert(xhr.responseText);

        }
    }
    fd.append('status', status);
    // Initiate a multipart/form-data upload
    xhr.send(fd);
    return false;
}

如果有人知道为什么它不知道这是一个xmlhttprequest它会非常有帮助。

1 个答案:

答案 0 :(得分:0)

请查看jQuery源代码的第67-74行 https://github.com/jquery/jquery/blob/master/src/ajax/xhr.js

    if ( !options.crossDomain && !headers["X-Requested-With"] ) {
        headers["X-Requested-With"] = "XMLHttpRequest";
    }

    // Set headers
    for ( i in headers ) {
        xhr.setRequestHeader( i, headers[ i ] );
    }

我知道,Apache2会收到这些标题,因此您可以检测到 如果调用是否是Ajax。