Требование HTML-страницы, но не повторяя ее - PullRequest
1 голос
/ 17 марта 2011

Я работаю с JSON и AJAX, чтобы получить HTML без обновления страницы.Вызов AJAX вызывает упрощенную функцию следующим образом:

function postHTML($post) { // returns the HTML structure for a post starting from an array of variables
    # other stuff
    require('post.template.php'); // which is mostly HTML with just few php variables embedded
}

$data = '';
foreach ($posts as $post) {
    $data .= postHTML($post);
}

После этого я управляю json следующим образом:

echo json_encode(array('success' => true, 'data' => $data));

Где данные должны быть HTML-структурой каждого загруженного сообщения,Проблема в том, что, когда мне требуется файл post.template.php, который он использует, им требуется и он возвращает данные в Javascript следующим образом:

[HTML posts] {"success": true, "data": ""}

Как я могу получить HTML-код в переменную и затем передать егона json_encode без фактической необходимости страницы (которая по-прежнему должна выполняться как PHP)?

Ответы [ 3 ]

3 голосов
/ 17 марта 2011

Вы можете использовать Буферизация вывода , окружить ваши требования, чтобы захватить вывод, не допуская его вывода: он будет сохранен в памяти, и вы сможетечтобы получить его в переменную.


По сути, это будет означать использование следующего вида кода:

ob_start();

// Output is no longer sent to the standard output,
// but stored in memory
require('post.template.php');

// Fetch the content that has been stored in memory
$content = ob_get_clean();


В качестве пары ссылок:

2 голосов
/ 17 марта 2011
<?php

function postHTML($post) { // returns the HTML structure for a post starting from an array of variables
    ob_start();
    # other stuff
    require('post.template.php'); // which is mostly HTML with just few php variables embedded
    $output = ob_get_contents();
    ob_end_clean();

    return $output;
}

$data = '';
foreach ($posts as $post) {
    $data .= postHTML($post);
}
0 голосов
/ 17 марта 2011

Поместите весь код, генерирующий данные, в другую функцию и вызывайте ее при необходимости.(Да, вложенные функции разрешены в PHP, но не уверены, что это работает в вашем случае, так как вы используете 'require') *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...