【问题标题】:Detect Ajax in PHP在 PHP 中检测 Ajax
【发布时间】:2013-11-16 16:09:49
【问题描述】:

我正在尝试将 ajax 发布到同一个 php 页面。

阿贾克斯:

$("#loginForm").submit(function(e) {
    e.preventDefault();
    var postData = $(this).serialize();
    $.post("login.php", postData);
});

postData 正确,格式如下:

username=john&password=123123

PHP(同一页面):

if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
      echo 'Ajax Request Detected';
}

然而,这个 if-check 总是返回 false 并且永远不会执行 echo 行。我在这里做错了什么?

【问题讨论】:

  • 我可能会看看现有的代码,比如ZF's ContextSwitch helper。我认为非常简单:return ($this->getHeader('X_REQUESTED_WITH') == 'XMLHttpRequest'); 假设答案也确实取决于服务器。

标签: php jquery ajax forms login


【解决方案1】:

我尝试了所有建议的答案,但对我有用的是使用以下代码

if (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false) {
  //this request expects json
  die('json expectd');
}
die('non json');

我目前正在使用 axios,没有修改任何标题设置。

根据您的 javascript 包,您可能需要在标头中定义 ACCEPT 才能对您有效。

但是对于大多数 AJAX 包来说,默认情况下它总是存在并且它工作正常。

【讨论】:

    【解决方案2】:

    在原版 javascript 中,您需要将其添加到您的 ajax:

    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    

    虽然我不知道它是如何在 jQuery 中完成的,但它应该是可行的。

    【讨论】:

      【解决方案3】:

      这是在php中检测ajax请求的正确方法:

      if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {
          // this is ajax request, do something
      }
      

      【讨论】:

        【解决方案4】:

        您正在搜索的标头称为“X-Requested-With”(值 XMLHttpRequest),无法使用 $_SERVER['HTTP_X_REQUESTED_WITH'] 检索。

        您可以使用 $_SERVER 变量上的 var_dump 自己找到它。或者,您也可以使用浏览器找出发送的标头是什么。

        在脚本中获取请求标头,可以使用 getallheaders 函数完成。

        http://us3.php.net/manual/en/function.getallheaders.php

        【讨论】:

          【解决方案5】:

          我建议使用 GET 参数来识别 AJAX 请求。 $_SERVER 取决于网络服务器和 javascript 框架。

          -> 使用 AJAX 时将 URL 更改为 login.php?ajax=1。

          【讨论】:

          • 这也是我做过很多次的事情。它可以在任何服务器上运行 :) 如果您不希望它出现在 URI 上,也可以附加到 POST 值。
          猜你喜欢
          • 2012-04-17
          • 1970-01-01
          • 2011-07-19
          • 2012-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-28
          相关资源
          最近更新 更多