Как сгенерировать HTML с PHP, чтобы вернуться после вызова AJAX - PullRequest
1 голос
/ 30 июля 2011

Я генерирую все свои html на своей странице с помощью вызовов ajax и никогда не обновляю свою страницу.Моя установка выглядит примерно так:

HTML: <a id="user_click_here">test link</a>

JQUERY:

$("#user_click_here").live("click", function(event){
    console.log("click on test link");
    ajax_function("action=return_some_html");   
});

Функция ajax вызывает php, где я создаю html.То, с чем я борюсь, это генерировать HTML с PHP.Я пытаюсь использовать это:

PHP:

    $html = <<<HTML

    <div class="box">
        <h2>
            <a href="#" id="remove">$text[0]</a>
        </h2>
        <div class="block">

        <div style="float:left; width: 35%; margin:5px; padding: 1em; background: white;">

HTML;

    $html .= '<p>Username: <a id="username">' . $_SESSION['username'] . '</a></p>';     


    $html .= <<<HTML


            <div style="float:left; width: 30%; margin:5px;">
                <p>
                    Level:<br />
                    Weapon:<br />
                    Power:<br />
                    Bullets:<br />
                </p>
            </div>
            <div style="float:right; width: 60%; margin:5px;">
                <p>

HTML;

    $html .= '<b id="level">empty</b><br/>';    


    $html .= <<<HTML        <---ERROR HERE unexpected '<<'  



                    Weapon blabla<br />
                    2 - 5<br />
                    3/6<br />
                </p>
            </div>
        </div>

Я просто пытаюсь терпеть неудачу, пока он не работает с этим <<<WHATEVER (не помню, как он называется).Как сейчас, когда я получаю ошибку unexpected '<<' по какой-то причине.

Должен ли я использовать этот метод:

$html = '<div class="box">
        <h2>
            <a href="#" id="remove">' . $text[0] . '</a>
        </h2>
        <div class="block">

        <div style="float:left; width: 35%; margin:5px; padding: 1em; background: white;">'; 

?

Каков наилучший способсохранить HTML в PHP и отправить его обратно в JQuery.

Теперь я отправляю html следующим образом:

PHP:

$data = array("html" => $html);
        return json_encode( $data );

Конечно, я хочу сжать его как можно больше, желательно без каких-либо вещей, подобных этому: \n\t\t\t\t чтобы занять место.

РЕДАКТИРОВАТЬ:

ОК.Не думаю, что все заметили тот факт, что это ajax-вызов, и мне нужно вернуть элемент json .Я не могу сделать общее <?php php code ?> html code <?php more php ?> some html

Ответы [ 2 ]

2 голосов
/ 30 июля 2011

Похоже, ваш последний HEREDOC (именно так называется синтаксис <<<) не разглашен, ему не хватает

HTML;

И не забывайте, что в конечном HTML; не может быть любых пробелов в одной и той же строке до или после нее.

Однако ты все делаешь неправильно. Самое замечательное в синтаксисе HEREDOC заключается в том, что вы можете встраивать в него все свои переменные, не требуя никакой конкатенации. Просто создайте все это в одном HEREDOC и отправьте его в jQuery. Нет необходимости делать его JSON, если вы просто собираетесь использовать его как HTML при получении вызова AJAX.

Весь ваш код выше находится внутри одного $html = <<<HTML блока. Вложите все свои комплексные переменные, такие как $_SESSION['whatever'] в {} {$_SESSION['whatever']}.

$html = <<<HTML

<div class="box">
    <h2>
        <a href="#" id="remove">{$text[0]}</a>
    </h2>
    <div class="block">

    <div style="float:left; width: 35%; margin:5px; padding: 1em; background: white;">
      <p>Username: <a id="username"> {$_SESSION['username']}</a></p>
        <div style="float:left; width: 30%; margin:5px;">
            <p>
                Level:<br />
                Weapon:<br />
                Power:<br />
                Bullets:<br />
            </p>
        </div>
        <div style="float:right; width: 60%; margin:5px;">
            <p>
             <b id="level">empty</b><br/>
     <!--etc -->
     <!--etc -->
HTML;

// Now just echo it back to the AJAX caller as HTML
echo $html;
exit();
1 голос
/ 30 июля 2011

Не используйте HEREDOC. Это грязно и должно использоваться только тогда, когда вам нужно хранить длинные строки в переменной. Попробуйте написать страницу HTML, которую вы ожидаете вернуть, как если бы это была обычная страница HTML. Там, где вам нужен вывод PHP (переменная, значение массива и т. Д.), Начинайте тег PHP, выводите значение, а затем заканчивайте тег PHP. Это гораздо проще, чем пытаться использовать heredoc.

<div class="box">
<h2><a href="#" id="remove"><?php echo $text[0]; ?></a> </h2>
<div class="block">
<div style="float:left; width: 35%; margin:5px; padding: 1em; background: white;">  
    <p>Username: <a id="username"><?php echo $_SESSION['username']; ?></a></p>              
    <div style="float:left; width: 30%; margin:5px;">
        <p>Level:<br />Weapon:<br />Power:<br />Bullets:<br /></p>
    </div>
    <div style="float:right; width: 60%; margin:5px;">
        <p><strong id="level">empty</b><br />Weapon blabla<br />2 - 5<br />3/6<br /></p>
    </div>
</div>

Если вас беспокоят разрывы строк (не следует этого делать), вы можете добавить обработчик вывода, который их удаляет.

ob_start("clean_linebreaks");
function clean_linebreaks($input) {
    return str_replace("\n", "", str_replace("\r", "", $input));
}

Кроме того, могу ли я предложить использовать таблицы вместо плавающих элементов div. Уровень, оружие и сила будет легче согласовывать с их значениями, если вы используете таблицу.

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