从包含的php文件返回JSON格式的HTML

时间:2017-05-20 11:18:12

标签: php json ajax

我一直在尝试将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作为外部文件;不幸的是,我无法改变这一点。

1 个答案:

答案 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的成功保持不变。