2017-05-20 13 views
0

私は最終的に動作するように私のサーバーからJSONオブジェクトにHTMLを戻すようにしています。付属のphpファイルからJSON形式のHTMLを返します

ファイルが含まれている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); 

そして

私のindex.htmlには、このようになります最後に、私のtest.phpファイルは:

です

これが実行されると、rtnData['html']に何も返されず、コンソールログに「問題がありました」と表示されます。

私はfile_get_contents('test.php');$returnVal['html'] = include 'test.php';を変更する場合は、HTMLを返しますが、PHPが実行されずにテキストとして返されるので、私のHTMLは、The simple sum 5 + 4 = <?php echo 5 + 4;?>代わりのThe simple sum 5 + 4 = 9に置き換えられます。

達成しようとしていることはありますか? test.phpを外部ファイルとして残す必要があります。残念ながらそれを変更することはできません。

答えて

0

1つの考えられる方法は:dataType: jsonを忘れて、process.phpからプレーンhtmlを返します。

内容: - :

<?php 
include 'test.php'; 

Ajaxの成功になります:あなたはtest.phpからbuffer outputに持って

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

それでもJSONを返すために必要がある場合はprocess.php

内容だけがなりますprocess.phpは、

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

この場合のAjaxの成功は同じです。

+0

ありがとう、万人のu_muider ....私はそれを試して、できるだけ早くあなたの答えを受け入れるでしょう。 JSONではなくHTMLを返すことに関して、私がそれを行った場合、エラーを返す最良の方法は何ですか?私はちょうどいくつかのHTMLと一緒に500の内部サーバーのエラーヘッダーを返すか、それはちょっとしたハックですか? – Damian

+0

なぜでしょうか?500ステータスの場合、 'error'ハンドラは'成功 'ハンドラではなくajaxで呼び出されます。 –

+0

もう一度お返事ありがとうございます。 – Damian

関連する問題