检测到AJAX请求$ _SERVER ['HTTP_X_REQUESTED_WITH']未定义

时间:2018-03-15 12:16:50

标签: javascript php ajax xmlhttprequest

我正在为Linux 5.6.33运行XAMPP

js代码:

var url = "send.php";
xhttp = new XMLHttpRequest();
xhttp.open("POST", url, true);
xhttp.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest');
xhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhttp.onload = function() {
    var decoded_response = JSON.parse(xhttp.responseText);
    if (xhttp.readyState == 4 && xhttp.status === 200 && xhttp.responseText && decoded_response) {
        //success
    }
    else if (xhttp.status !== 200 || !xhttp.responseText || !decoded_response) {
        //error
    }
};
xhttp.send(param);

我的send.php文件

  if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'XMLHttpRequest') {
    $encoded = json_encode($ajax_message);

    header('Content-Type: application/x-www-form-urlencoded');

    echo $encoded;

  }
  // else just display the message
  else {
    echo $message;

  }

从firebug我可以看到请求和标题,它就在那里,但if语句是假的,如果我将它添加到php代码中的else

foreach (getallheaders() as $name => $value) {
echo "$name: $value\n";}

我可以在firebug的响应中看到,HTTP_X_REQUESTED_WITH仍然存在,所以在我的代码中没有被清除,但如果我尝试

echo $_SERVER['HTTP_X_REQUESTED_WITH'];

我得到的是一个未定义的索引

我没有对网络服务器进行任何更改,也没有任何.htaccess文件,我无法弄清楚为什么$ _SERVER ['HTTP_X_REQUESTED_WITH']无效。

1 个答案:

答案 0 :(得分:1)

标题名称应为X-Requested-With

PHP只需将其转换为所有大写,将-替换为_,并在HTTP_表达时将其作为$_SERVER的前缀。

你在进入JS之前手动进行转换,然后PHP 再次进行

X-Requested-With虽然是一个肮脏的黑客。我会使用Accept: application/json的内容来请求JSON响应而不是HTML响应(并在PHP中查找该标头)。