我有一些包含一些php代码的类和方法。现在我想将这些PHP代码用于ajax和http请求。怎么样?
我应该两次编写所有PHP代码吗?一次用于ajax请求,一次用于http请求?
这是我目前的结构:
/********************************************** Search.php ****/
... // some html codes
<div id="content">
<?php
if(!empty($_SERVER["HTTP_X_REQUESTED_WITH"]) &&
strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) === "xmlhttprequest")
{
$type = true; // true means ajax request
} else {
$type = false; // false means http request
}
$obj = new classname;
$results = obj->func($type);
echo $results;
?>
</div>
... // some html codes
/********************************************** Classname.php ****/
class classname {
public function func($type){
$arr = ('key1'=>'some', 'kay2'=>'data');
if ($type){
echo json_encode($arr);
} else {
return $arr;
}
}
}
现在我想知道,这是标准的吗?实际上我也希望将它用于来自移动应用程序(类似API)的请求。我认为上面的代码有两个问题:
嗯,有什么意义我需要知道吗?
答案 0 :(得分:1)
这更多是关于软件的设计,然后简化它。通常,您将拥有一个包含您使用的类的结构,并将PHP文件用于响应类型。
例如:
你可以拥有这些文件:classes.php,index.php和ajax.php。
这些类将包含可以显示为JSON或HTML的通用类。
PS:
Simplified意味着:
/********************************************** Search.php ****/
... // some html codes
<div id="content">
<?php
$obj = new classname;
$results = obj->func($_SERVER["HTTP_X_REQUESTED_WITH"]);
echo $results;
?>
</div>
... // some html codes
/********************************************** Classname.php ****/
class classname {
public function func($type){
$arr = ('key1'=>'some', 'kay2'=>'data');
if(!empty($type["HTTP_X_REQUESTED_WITH"]) &&
strtolower($type["HTTP_X_REQUESTED_WITH"]) === "xmlhttprequest"){
echo json_encode($arr);
} else {
return $arr;
}
}
}
答案 1 :(得分:1)
您可以编写单个代码,而应仅使用partials来加载AJAX数据。我们使用AJAX的主要原因是最小化数据传输。您不应该在AJAX调用中加载整页HTML,尽管它完全有效。
我建议根据我的经验,有一个文件:
<?php
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
/* special ajax here */
die(json_encode($data));
} else { ?>
Regular Flow of Content
<?php } ?>
答案 2 :(得分:1)
我首先会做所有业务逻辑,调用你的类,而不依赖于你是否在ajax调用中。当所有准备好输出时,请进行切换:
<强>的search.php:强>
<?php
// first do your business logic without view dependency.
$obj = new classname;
$results = obj->func(); // no type is passed.
if(!empty($_SERVER["HTTP_X_REQUESTED_WITH"]) &&
strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) === "xmlhttprequest")
{
// ajax request
echo json_encode($results);
exit();
}
// http request
?>
... // some html codes
<div id="content">
<?=$results?>
</div>
... // some html codes
<强> Classname.php:强>
<?php
class classname {
public function func(){
$arr = ('key1'=>'some', 'kay2'=>'data');
return $arr;
}
}
?>