0

我创建了一个系统,其中 HTML 由 php 或 ajax 构建。因为 HTML 几乎相同,所以我决定为此创建一个包含文件,以便 php 和 javascript 可以使用该文件。问题是是否有办法查看包含的文件当前是由 ajax 函数还是由 php 使用?

这是一些示例代码,可以更好地理解我的意思:

$variable = "";

if (this include file is currently used in an ajax function) {
    $user = \'+variable[0]+\';
    $content = \'+variable[1]+\';
}

$variable .= '<div>';
$variable .=     '<a href="'.$user.'">'.$user.'</a>';
$variable .=        '<div><p>'.$content.'</p></div>';
$variable .= '</div>';

希望你明白我的意思:D

4

3 回答 3

1

检查是否被php包含更可靠,因为它是服务器端控制的检查。假设该文件是名称to_be_included.php

somefile.php您用来包含的文件中to_be_included.php

define("MY_APP");

然后在to_be_included.php. 做一个检查:

if (!defined("MY_APP")) { 
  // accessed by ajax
} else {
  // accessed by php
}
于 2013-09-09T17:29:23.107 回答
0

更多信息:http ://davidwalsh.name/detect-ajax

if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $is_ajax = true;
}

取决于您用于 AJAX 的内容,但大多数现代库(例如 jQuery)都会发送该标头。也不是所有的 Web 服务器都会提供这个标头,所以它不是 100% 可靠的。

于 2013-09-09T17:21:45.903 回答
0

在你的 php 中,

    $ajax = 0;
    if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
    {
        $ajax = 1;
    } 
    elseif (isset($_POST['HTTP_X_REQUESTED_WITH']) && strtolower($_POST['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') //this is an optional method 
    {
         $ajax = 1;
    }

define('IS_AJAX', $ajax);

在你的前端代码中,

$.ajax({
  type: "POST",
  url: URL,
  data: {"HTTP_X_REQUESTED_WITH":"xmlhttprequest"}
}).done(function( data ) {
});

在您的原始代码中,

$variable = "";
if (IS_AJAX) {
    $user = \'+variable[0]+\';
    $content = \'+variable[1]+\';
}
于 2013-09-09T17:28:35.357 回答