@thisuserhatephp
Офлайн - losers Онлайн - lusers

Как вывести php функцию в ответе json?

page.php --
$ss = get_stock($id);

        $success = [
            'ok' => $ss
        ];

        echo json_encode($success); 
        exit();


ajax --
$.ajax({
        type: 'POST',
        url: 'page.php',
        cache: false,
        dataType: 'json',
        data: {
            product_id : id,
        },
        success: function(data) {
             //тут нужно вывести `ok` из page.php
        }


На страницу page.php выполняется ajax запрос после чего нужно вывести, то что вернуло функция get_stock($id);

Так как я сделал - не работает, но если переменную $ss заменить на $ss = 'sometext'; то все сообщение выводиться.

функция get_stock возвращает (на самом деле не это, но сути это не меняет)
function get_stock($id) {
?>
 <div class="<?php echo $id ?>"></div>
<?php
}
  • Вопрос задан
  • 86 просмотров
Решения вопроса 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
В голове моей опилки - не-бе-да! (с) сами знаете.

Вы хотя-бы разберитесь, что же конкретно у вас возвращает функция get_stock(), через var_dump($ss);.

А после того, как увидите проблему, то поймёте, что на самом деле должно быть:
function get_stock($id) {
return "<div class='{$id}'></div>";
}
Ответ написан
Комментировать
@thisuserhatephp Автор вопроса
Офлайн - losers Онлайн - lusers
Решил следующим образом:
В начале функции get_stock нужно включить буферизацию, в конце функции получить буфер и вернуть его:

<?php
function get_stock($id) {
  ob_start();
?>
...тут html

<?php
    $result = ob_get_clean();
 
    return $result;
}
?>


В целом вариант AUser0 рабочий, но не в этом случае, скорее из-за плохой архитектуры моего кода.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mahmudchon
@mahmudchon
Сделайте:
...
success: function(data) {
    console.log(data); // тут видно ответ
    // data.ok - то, что вам нужно
}
...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы