在我的应用程序中,我经常使用AJAX调用来获取某些变量以及html代码,样本JSON:
{
'result': '1',
'error': '0',
'someVar': 'abc',
'outputHTML': '<table>....</table>',
}
创建这样的JSON我必须在关联数组中分配每个值并对其进行编码(服务器端:PHP代码)。
$response=array(
'result' => 1,
'error' => 0,
'someVar' => 'abc',
'outputHTML' => '<table>....</table>',
);
echo @json_encode($response);
die();
我的HTML代码直接在我的类中,但我想将其移动到单独的模板文件中以减少类大小并将类代码与html代码分开。问题是我无法将模板代码转换为变量,样本:
function ajax_response()
{
$response=array();
//of course below code doesn't work
$response['outputHTML']=include('table-html.php');
echo @json_encode($response);
die();
}
table-html.php文件包含:
<table>
...
</table>
该问题的一个解决方案是使用输出缓冲来捕获table-html.php文件的内容并将其插入到变量中。缺点是输出缓冲并不总是在服务器上启用,因此在某些主机上这样的代码将无法正常工作。 您对该问题的替代解决方案有什么建议吗?
注意:模板文件使用PHP代码动态生成HTML代码,因此必须解析包含的PHP文件。
更新
实际上这段代码可行:
$response['outputHTML']=include('table-html.php');
如果table-html.php具有以下内容:
<?php
$output = '<table>'.$some_var.'</table>';
return $output;
答案 0 :(得分:4)
include
和require
用于将PHP代码加载到您的应用程序中。
要获取文件的内容并将其存储在变量中,请使用file_get_contents
请注意,文件的给定路径是相对于条目脚本的。当您的脚本包含在其他位置时,这可能会产生意外结果。要解决此问题,请使用__DIR__
魔法常量。
最终代码如下:
$response['outputHTML'] = file_get_contents(__DIR__ . '/table-html.php');
首先,您可能需要查看Twig之类的模板引擎,并省去一些麻烦。
如果您想自己动手,您需要在代码中更改的唯一方法是在table-html.php
末尾返回一个变量。我建议使用Heredoc创建可读且简单的模板。
示例强>
<?php
return <<<EOT
<table>
<tr><td>$firstname</td><td>$lastname</td></tr>
</table>
EOT;