2015-11-20 74 views
1

我想用php标记之外的json编码使用一个ajax调用来更新两个div。 我熟悉Update two divs with one AJAX response,但将有可能做同样的事情,但有数据 < PHP?>如何使用json_encode与PHP标记之外的html和php混合使用

相反回声-ING Ajax响应的我已经关闭PHP和使用普通的HTML像这里的例子是代码服务器端:

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

,然后在阿贾克斯功能我更新的div喜欢:

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

现在想象一下,我必须使用json_encode创建ŧ WO是更新两个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' 
)); 
?> 

不会工作,但我希望这说明了什么我尽力去完成。

回答

0

有了一些研究我已经设法弄清楚了。 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 
)); ?> 

在阿贾克斯我用

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

可能是你需要设置页眉在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); 
} 
+0

这是有趣的 - 你可以提供例如简单的JSON与创建这样两个变量? 所以像<?php header('Content-Type:application/json'); ?>然后如何格式化变量? –

+0

@GrzegorzZieliński我实际上在我的代码中以这种方式使用它..但我没有一个生动的例子..只是用你的代码替换它并测试它..并且看到更新的答案 –

+0

问题是

Lorem Lorem <?php echo $ somvariable; ?>

确实是一个更大的HTML/PHP代码。这就是为什么它会花费时间将其转换为正常的PHP字符串,就像你的回应。这就是为什么我试图找到一种方法来做到这一点以外的PHP - 也许在原始JSON。 –