【问题标题】:Is there a way (In PHP) of detecting if the script was called by jQuery load or not?有没有办法(在 PHP 中)检测脚本是否被 jQuery 加载调用?
【发布时间】:2015-11-12 19:50:54
【问题描述】:

我想要一个可以检测是否被 jquery 调用的脚本

如果不是,它会显示页面+布局,如果不是,它只是内容(但这无关紧要)

但是,是的,一种检测它是由 jquery load - ajax - 还是直接请求调用的方法。

干杯!

【问题讨论】:

    标签: php jquery ajax load


    【解决方案1】:

    您可能想看看您的服务器正在接收的 HTTP 标头。

    例如,假设我有这个页面:

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.js"></script>
    </head>
    <body>
        <div id="test"></div>
        <script type="text/javascript">
            $('#test').load('temp.php');
        </script>
    </body>
    </html>
    

    而 temp.php 脚本只包含这个:

    <?php
    var_dump($_SERVER);
    
    die;
    


    load 被执行时,“测试”&lt;div&gt; 将包含$_SERVER 的转储;它会包括这个,除其他外:

    'HTTP_X_REQUESTED_WITH' => string 'XMLHttpRequest' (length=14)
    

    XMLHttpRequest 是用于发出 Ajax 请求的对象。


    这意味着您应该能够检测请求是否是通过 AJax 查询发出的,如下所示:

    if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
        && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
        echo "Ajax";
    } else {
        echo "Not Ajax";
    }
    

    这样,您可以检测您的页面是“正常”调用还是通过 Ajax 请求调用,并决定是否必须包含布局。


    顺便说一句:这正是 Zend Framework 等 detect Ajax requests 使用的解决方案。

    【讨论】:

    • 第一行可以简化为 if (@$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    • @Sbm007 :我真的不喜欢使用 @ 运算符“隐藏”错误,并且仅在确实需要时使用它——在这里,我想测试 $_SERVER 中的条目是否是存在,如果它的值是我想要的,这正是 isset 和第二个条件所做的。
    • 哦,好吧,我没有意识到这一点。我以为他们是一样的。谢谢。
    • 不需要 isset 也不需要 @ 运算符 - if($_SERVER['HTTP_X_REQUESTED_WITH']) { } 就可以了。不需要多余的东西。
    • @Sbm007 : 没问题 :-) ;; @ceejayoz:这样,当您的 PHP 脚本被正常调用时(即,当 $_SERVER 中不存在该条目时),您将收到“通知:未定义索引:HTTP_X_REQUESTED_WITH”——是的,我总是使用通知已激活,我鼓励每个人都这样做。
    【解决方案2】:

    你不能在负载中发送一个 GET 参数吗?

    即:

    jquery=1 //(for load)
    
    jquery=2 //(for the 'low-level' ajax call)
    

    正常脚本加载的任何其他值

    然后让 PHP 脚本处理确定下一步要做什么。通过读取$_GET['jquery']的值

    【讨论】:

    • 所以如果我有一个脚本说: $("#actualcontent").load($(this).attr("href"));我将如何为此添加一个额外的变量/GET 参数?
    • $("#actualcontent").load($(this).attr("href")+'?jquery=1');
    • 如果过于手动。 jQuery 已经发送了一些内容以及您可以使用的请求,而无需更改单行 JS。
    • 我也像其他答案一样投票支持使用$_SERVER['HTTP_X_REQUESTED_WITH']。毕竟,这正是它的用途——查看请求是否来自 Ajax 实现。
    • 很公平,但是您将如何区分 jQuery load() 调用和 jQuery ajax() 调用?如问题中所述。
    【解决方案3】:

    如果我没记错的话,jQuery 的 AJAX 函数会发送一个 X-Requested-With 标头(值为 XMLHttpRequest)。

    【讨论】:

      【解决方案4】:

      如果你使用 Zend 框架,你可以使用

      // in one of your controllers
      if ($this->getRequest()->isXmlHttpRequest()) {
        // ...
      }
      

      http://framework.zend.com/manual/en/zend.controller.request.html

      【讨论】:

        猜你喜欢
        • 2016-10-01
        • 2010-11-20
        • 2011-07-17
        • 2013-07-23
        • 1970-01-01
        • 1970-01-01
        • 2014-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多