我一直在尝试将HTML从我的服务器传回JSON对象,我终于设法让它工作了。
我现在希望能够从包含的文件中传回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']
中返回任何内容,我会看到控制台日志&#39;出现问题&#39;。
如果我将$returnVal['html'] = include 'test.php';
更改为file_get_contents('test.php');
,则会返回HTML,但php会以文本形式返回而不会被执行,因此我的HTML将替换为The simple sum 5 + 4 = <?php echo 5 + 4;?>
而非{{1} }。
我努力实现的目标是什么?我需要将test.php作为外部文件;不幸的是,我无法改变这一点。
答案 0 :(得分:0)
一种可能的方法是:忘记dataType: json
并从process.php
返回纯HTML。
process.php
的内容将只是:
<?php
include 'test.php';
Ajax的成功将是:
success: function(rtnData) {
$('.main-content').replaceWith(rtnData); // Redraw content
}
如果你仍然需要返回json - 你必须test.php
来自process.php
:
<?php
ob_start();
include 'test.php';
$returnVal['html'] = ob_get_clean();
echo json_encode($returnVal);
的内容将是:
OCR
在这种情况下,Ajax的成功保持不变。