我使用jQuery和AJAX在HTML和PHP之间进行交互。
我放了一个带有GET参数的url,PHP文件打印了一个JSON数组,其中包含我的数据库返回的数据。然后我在我的HTML中显示它。
<?php
if (isset($_GET["vari"]) && isset($_GET["vari2"])){
echo json_encode(array("hello", $_GET["vari"], $_GET["vari2"]);
}
?>
我想要做的是当有人用GET参数打开PHP文件的url然后将重定向到我的HTML文件并在这里显示信息,就像我使用jQuery和AJAX一样。但是,很明显,当我打开PHP时,我看到了JSON数组...... 所以我发现了这个:
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
// JSON
} else {
// HTML
}
但如果我想加载index.html文件externaly并显示参数的数据,我该怎么办?因为如果我使用header('index.html')或echo file_get_contents('index.html'),那么我无法发送参数。我解释一下?
我正在寻找最好的方法,你有什么建议吗? 我希望我很清楚,但如果你需要更多信息来帮助我告诉我,我会编辑帖子。
答案 0 :(得分:4)
您可以检查请求是否通过AJAX完成,如果是,则仅显示JSON响应。
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
// JSON
} else {
// HTML
}
答案 1 :(得分:2)
“检测AJAX”方法是解决问题的直接实际解决方案。但是,让客户指定它想要接收的内容是更好的。
许多应用程序框架通过检测URL中是否存在.type
后缀来实现此目的。例如,http://path/to/data.json
将返回JSON,http://path/to/data.html
或普通http://path/to/data
将返回HTML。但是,要进行此设置,您需要具有特定的URL结构并使用前端控制器脚本或访问Web服务器配置。
要使用PHP实现此功能,我们的想法是,您的网址看起来像/.../data.php/json
,而data.php
会执行以下操作:
$data = array('Sample' => 'data');
switch (strtolower($_SERVER['PATH_INFO'])) {
case '/json':
echo json_encode($data);
break;
default:
print_r($data);
break;
}
从技术上讲,正确的方法是让客户端通过HTTP Accept
标头指定类型,该标头是为此目的而创建的。这样做的好处是“按书”,但它使得访问此功能变得更加困难(而将.json
后缀传递给url是微不足道的。)
以下是使用Accept
标题如何执行此操作的简单示例:
$data = array('Sample' => 'data');
if (strpos($_SERVER['HTTP_ACCEPT'], "application/json") === false) {
print_r($data);
}
else {
echo json_encode($data);
}
请注意,上面的代码严重不足,因为它没有尝试正确解析标题,这绝对应该。但是,正确确定客户端的首选内容类型并非易事。
答案 2 :(得分:0)
在你的.php页面开始时,你可以这样做。
if($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest')
{
header('Location: index.html'); // Your HTML page url
}
希望这对你有用。 :)
Enajoy !!!
答案 3 :(得分:0)
这是我的方法: 我在应用程序环境中创建了一个常量(我把它放在我的前控制器中)用于这种情况,例如:
define('AJAX_CALL', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
有了它,现在你可以询问电话的类型
if(AJAX_CALL){
//do stuff
}
此外,您可以定义一个指示是否为ajax的变量,将其添加到发送的数据中。如果你传递一个带有另一个数据的json对象,添加{ajax:true}然后在php文件中:
if($_GET['ajax']){
//do stuff
}
我希望它很有用。