Как скрыть вывод 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>
допустим файл, который возвращает 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 страницу или вообще ничего не выводить. Но это "защита от дурака", потому что запрос всегда можно подделать
Если я правильно понял суть вопроса, то возможны как минимум 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');
Сборка персонального компьютера от Artline: умный выбор для современных пользователей