Cкрыть результат вывода json

150
05 декабря 2018, 02:20

Как скрыть вывод json в нижеуказанном коде (или обойти это)? Сейчас echo выводит содержимое json на странице. Без вывода echo консоль выводит

"JSON.parse: unexpected end of data".

<?
    $out = json_encode(array(
        surname => $surname_php, //присваиваем переменным в объекте,
        //который передадим на клиент имена - 'surname' в данном случае
        email => $email_php,
        ...//остальные переменные
    ));
    echo $out;
?>
<script>
    ...
    success: function(data){
        data = JSON.parse(data);
        $('#surname').val(data['surname']);//собственно data и будет хранить 
        //переменные в ячейках с именами, присвоенными ранее, в php
    }
</script>
Answer 1

допустим файл, который возвращает JSON называется json.php, а файл, который запрашивает данные index.html

Проблема вот в чем: если вы убираете echo $out, то файл json.php ничего не возвращает, переменная data становится пустой строкой и JSON.parse выдает ошибку, потому что пустая строка это не валидный JSON

И решения, которое вы хотите, нет. Вам в любом случае нужно, что бы файл json.php возвращал какие-то данные. Если к ним можно обратиться через ajax, то можно обратиться и напрямую через http.

Как вариант "защиты от дурака", это просто добавить в ajax данные, либо специальные заголовки

$.ajax({
   url,
   headers: {
      from-ajax: true
   }
});

А на сервере проверять, что этот заголовок есть, иначе выводить 404 страницу или вообще ничего не выводить. Но это "защита от дурака", потому что запрос всегда можно подделать

Answer 2

Если я правильно понял суть вопроса, то возможны как минимум 2 варианта

Первый вариант. Сохранить значение в глобальную переменную

var r;
...
success: function(data){
  r = JSON.parse(data);;
}

Второй вариант. Использовать jQuery.data() (https://api.jquery.com/data/)

success: function(data){
    data = JSON.parse(data);
    $('#surname').data('loaded_data', data);
}

Соответственно потом к данным можно будет обратиться вот так

var data = $('#surname').data('loaded_data');
READ ALSO
Как правильно настроить php-cli c докером?

Как правильно настроить php-cli c докером?

Debian 8, php 56 по-умолчанию, через докер ставлю версию php 7

121
Как исправить ошибку &ldquo;Non-static method &lt;method_name&gt; should not be called statically&rdquo;

Как исправить ошибку “Non-static method <method_name> should not be called statically”

Существует проект на YII2, который размещен на хостинге и работает без особых проблемПри развертывании на локальном сервере этого проекта...

117
Кодировка парсера didom

Кодировка парсера didom

использую эту библиотеку, как парсер https://githubcom/Imangazaliev/DiDOM Мне нужно получить расстояние от определенного адреса до ближайшего метро

170
Как изменить положение текста в php

Как изменить положение текста в php

как текст перенести на середину?

181