我想用一个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);
}