2017-05-20 40 views
0

我一直在尝试从我的服务器传回一个JSON对象中的HTML,我最终设法使其工作。从包含的php文件返回JSON格式的HTML

我现在希望能够从包括文件中传回HTML,但无法解决如何做到这一点....是否有可能?

我的index.html是这样的:

<head> 
<script src="ajax.js"></script> 
</head> 
<body> 
<div class="main-content"> 
<p>Some content to be replaced</p> 
</div> 
</body> 

我的JavaScript调用Ajax如下:

$.ajax({ 
    type: 'POST', 
    dataType: 'json', 
    url: 'http://example.com/process.php', 
    data: formData, 
    success: function(rtnData) { 
    $('.main-content').replaceWith(rtnData['html']); // Redraw content 
    }, 
    error: function(rtnError) { 
    console.log('there was a problem'); 
    } 
}); 

我process.php文件是在这里:

<?php 
$returnVal['html'] = include 'test.php'; 
echo json_encode($returnVal); 

而且最后,我的test.php文件是:

<div class="main-content"> 
    <div id="content"> 
    <p>The simple sum 5 + 4 = <?php echo 5 + 4;?></p> 
    </div> 
</div> 

运行时,它在rtnData['html']中什么也没有返回,我看到控制台日志'有问题'。

如果我改变$returnVal['html'] = include 'test.php';file_get_contents('test.php');它返回的HTML,但PHP返回为文本,而不执行的,所以我的HTML被替换为The simple sum 5 + 4 = <?php echo 5 + 4;?>,而不是The simple sum 5 + 4 = 9

是我想要实现的可能吗?我需要离开test.php作为外部文件;不幸的是,我无法改变这一点。

回答

0

一种可能的方式是:您忘记了dataType: json并从您的process.php返回纯HTML。

process.php内容将只是:

<?php 
include 'test.php'; 

阿贾克斯成功将是:

success: function(rtnData) { 
    $('.main-content').replaceWith(rtnData); // Redraw content 
} 

如果您仍然需要返回JSON - 您test.php必须buffer output

内容process.php将是:

<?php 
ob_start(); 
include 'test.php'; 
$returnVal['html'] = ob_get_clean(); 
echo json_encode($returnVal); 

在这种情况下,Ajax成功保持不变。

+0

感谢百万u_muider ....我会试一试,尽快接受你的答案。关于只传回HTML而不是JSON,如果我这样做,传回错误的最佳方法是什么?我会发送一个500内部服务器错误标题以及一些HTML还是有点破解? – Damian

+0

为什么不行,但在500状态的情况下,'error'处理程序将在ajax中调用,而不是'success'。 –

+0

再次感谢您的回答,祝您工作愉快! – Damian