【问题标题】:How does request::is_ajax() work in Kohana?request::is_ajax() 如何在 Kohana 中工作?
【发布时间】:2009-07-11 14:59:40
【问题描述】:

Kohana 如何确定请求是否为 AJAX 请求?

引荐来源字符串有什么不同吗?我是否需要添加一个 GET 参数,也许是 ?ajax=true ?

【问题讨论】:

  • 天哪,看看源代码吧!
  • 作为一个 PHP 菜鸟,我很难跟踪它在源代码中的位置(至少当我问这个问题时)。

标签: php ajax kohana


【解决方案1】:

它检查请求是否由 XMLHttpRequest 发出,因为在这种情况下,大多数浏览器都会发送一个带有此指示的标头:标头 HTTP_X_REQUESTED_WITH 将设置为 XMLHttpRequest。

【讨论】:

  • 从 Jonathan Sampson 的回答中可以看出,设置标题的不是浏览器,而是框架。
  • 嗯.. 请求头由浏览器发送。如果客户端(浏览器)不指示,框架将不知道请求是通过 XMLHttpRequest 还是通过普通的 http GET 发出的。
【解决方案2】:

从 v2.3.4 开始

/**
 * Tests if the current request is an AJAX request by checking the 
 * X-Requested-With HTTP request header that most popular JS frameworks 
 * now set for AJAX calls.
 *
 * @return  boolean
 */

public static function is_ajax()
{
  return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND 
          strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
}

【讨论】:

    【解决方案3】:

    Necro-posting 因为这首先出现在我的谷歌搜索中。

    不知道 Kohana 是否仍然以这种方式工作,但使用 HTTP_X_REQUESTED_WITH 不再是最佳做法。

    Ajax 请求——实际上是所有 HTTP 请求——都应该发送一个“Accept”标头。

    任何服务器端进程都应检查“Accept”标头以确定要发送的响应内容。在 PHP 中执行此操作的一种方法是:

      function is_ajax() {
        return $_SERVER['HTTP_ACCEPT'] == 'application/json';
      }
    

    【讨论】:

      猜你喜欢
      • 2015-06-18
      • 2016-01-28
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      相关资源
      最近更新 更多