如何将json_encode与php标记之外的html和php混合使用

How to use json_encode with mix of html and php outside PHP tags

本文关键字:php html 混合 json encode      更新时间:2023-09-26

我想用一个ajax调用更新两个div,其中json编码在php标记之外。我熟悉用一个AJAX响应更新两个div,但是否可以做类似的事情,但在<php?>

我没有回复ajax响应,而是关闭了php并使用了常规html,例如这里的代码服务器端:

<?php
//here some code that cheks some stuff
var $somvariable="Ipsum";
?>
<p>Lorem Lorem <?php echo $somvariable ; ?></p>

然后在ajax函数中,我更新div,比如:

success:function(data, textStatus, jqXHR) 
{
//data: return data from server
$('#divid').html(data);
}

现在想象一下,我必须使用json_encode创建两个变量来更新两个div,这样我就可以做到:

success:function(data, textStatus, jqXHR) 
{
$('#dividone').html(data.one);
$('#dividtwo').html(data.two);
}

我的代码在外面<php?>太大,将其转换为普通字符串太耗时。我怎样才能做到这一点?我的猜测是使用原始json,但如何使用呢?显然与完全不同

<?php
echo json_encode(array(
    'one' => '?><p>Lorem Lorem <?php echo $somvariable ; ?></p><?php',
    'two' => '?><p>Lorem <?php echo $somvariable2 ; ?></p><?php'
));
?>

不会奏效,但我希望它能展示我努力实现的目标。

可能需要在php中设置标题

header('Content-Type: application/json');

所以你的php代码应该是这样的

<?php
header('Content-Type: application/json');
echo json_encode(array(
    'one' => '<p>Lorem Lorem '.$somvariable.'</p>',
    'two' => '<p>Lorem  '.$somvariable2.'</p>'
));
?>

在ajax中使用

success:function(data) 
{
   $('#dividone').html(data.one);
   $('#dividtwo').html(data.two);
}

经过一些研究,我终于弄清楚了这一点。ob_get_clean()和ob_start()正是我所需要的。

<?php ob_start(); ?>
<div>First huge mix of php and html goes <?php echo "here"; ?></div>
<?php $one= ob_get_clean(); 
ob_start(); ?>
<div>Second huge mix of php and html goes <?php echo "here"; ?></div>
<?php $two= ob_get_clean();
echo json_encode(array(
  'one' => $one,
  'two' => $two
)); ?>

在ajax中,我使用了

success:function(data) 
{
$('#dividone').html(data.one);
$('#dividtwo').html(data.two);
}