是否有一种方法(在PHP中)检测脚本是否被jQuery加载调用?

Tom*_*Tom 2 php ajax jquery load

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

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

但是,是的,一种检测它是否被jquery load-ajax调用或直接请求的方法.

干杯!

Pas*_*TIN 14

您可能想要查看服务器正在接收的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>
Run Code Online (Sandbox Code Playgroud)

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

<?php
var_dump($_SERVER);

die;
Run Code Online (Sandbox Code Playgroud)


load被执行时,"测试" <div>将包含的转储$_SERVER; 它包括这个,除其他外:

'HTTP_X_REQUESTED_WITH' => string 'XMLHttpRequest' (length=14)
Run Code Online (Sandbox Code Playgroud)

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


这意味着您应该能够检测请求是否是通过AJax查询进行的,具体如下:

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

有了这个,您可以检测您的页面是"正常"调用,还是通过Ajax请求,并决定是否必须包含布局.


顺便说一句:这正是Zend Framework用来检测Ajax请求的解决方案.

  • @ Sbm007:我真的不喜欢用@运算符"隐藏"错误,并且只在必要时才使用它 - 在这里,我想测试$ _SERVER中的条目是否存在以及它的值是否是我的想要,这正是什么,第二个条件. (3认同)
  • @ Sbm007:没问题:-) ;; @ceejayoz:这样,当你的PHP脚本被正常调用时(即,当$ _SERVER中不存在该条目时),你会得到一个"通知:未定义的索引:HTTP_X_REQUESTED_WITH" - 是的,我总是用通知已激活,我鼓励大家也这样做. (3认同)

Wal*_*jad 6

你能不用负载发送GET参数吗?

即:

jquery=1 //(for load)

jquery=2 //(for the 'low-level' ajax call)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我还投票使用`$ _SERVER ['HTTP_X_REQUESTED_WITH']`,就像其他答案一样.毕竟,这正是它的用途 - 看看请求是否来自Ajax实现. (3认同)

cee*_*yoz 6

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