Вернуть json данные php — ajax
Я взял рабочий js файл, там есть функция выполняющая ajax запрос:
1 2 3 4 5 6 7 8 9 10 11 12
function send(name,phone,question,forma,referer,phrase) { $.ajax({ url: 'send.php', type: "POST", data:{name:name,phone:phone,question:question,forma:forma,referer:referer,phrase:phrase}, success: Result, error: Error, dataType: 'json' }); }
Делаю тестовый send.php, на который должны передаваться данные:
1 2 3 4 5 6 7
echo $_POST['phone']; echo $_POST['question']; echo $_POST['forma']; echo $_POST['referer']; echo $_POST['phrase']; ?>
Скрипт не выполняется. Как я понимаю, из-за того, что мне нужно вернуть данные в json формате, а для этого использовать json_encode().
Но я не могу понять как его использовать.
Вообщем прошу помочь с php скриптом.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вернуть в Ajax-success $json из другого $json
Здравствуйте, уважаемые форумчане! Столкнулся со следующей проблемой. Есть код: <?php $json.
Ajax + php + json что-то не отображается
Здравствуйте, делаю поиск по имени. В php всё работает, а вот с js не могу разобраться 🙁 В.
Создание чата (PHP,Ajax,JSON,MySql)
Привет,народ ! Уже день мучаюсь над этим (кстати,я-чайник в этой сфере). Хочу создать чат.
63 / 63 / 23
Регистрация: 09.12.2012
Сообщений: 459
Попробуй так:
echo json_encode($_POST);
Регистрация: 01.12.2014
Сообщений: 11
Благодарю. success: Result выполняется, это означает, что ajax запрос успешно выполнен.
Но вот echo не выводит данные.
Web Programmer
325 / 286 / 121
Регистрация: 28.09.2011
Сообщений: 1,570
$var["text"] = 'Hello'; json_encode($var);
1 2 3
success: function(result) { alert(result["text"]); }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
PHP скрипт -> Json -> выбор пользователя -> AJAX -> первоначальный PHP скрипт
Доброго времени суток! Я новичек вэб программировании, так что прошу строго не судить(в гугле.
Получить JSON данные в php
Доброго времени суток! Ребята, помогите пожалуйста, решить такую задачу: Реализация — JSON ответ.
Как вывести данные JSON через PHP?
Есть ссылка на JSON код http://188.225.25.159:6734/api/diets Получаю его таким образом: $json.
Достать данные на php из ajax запроса
Добрый день ув. пользователи! Подскажите пожалуйста, данные в теле HTTP запроса есть, а в $_REQUEST.
Отправить данные через Ajax в определённую функцию PHP
Здравствуйте! Долго думал как объяснить суть вопроса, в общем есть функция ajax .
Возврат JSON из PHP-скрипта
Я хочу вернуть JSON из скрипта PHP. Надо ли устанавливать Content-Type заголовок?
Ответ 1
Хотя обычно все работает и без этого, но , согласно спецификации, вам обязательно необходимо устанавливать Content-Type заголовок:
$data = /** все, что вы сериализуете **/;
header(‘Content-Type: application/json’);
echo json_encode($data);
Если я не использую конкретный фреймворк, я обычно разрешаю некоторым параметрам запроса изменять поведение вывода. Как правило, для быстрого устранения неполадок может быть полезно не отправлять заголовок, а использовать print_r и другую полезную нагрузку данных (хотя в большинстве случаев в этом нет необходимости).
Ответ 2
Полный фрагмент допустимого и понятного PHP-кода, возвращающего JSON, выглядит так:
$option = $_GET[‘option’];
if ( $option == 1 )
$data = [ ‘a’, ‘b’, ‘c’ ];
// декодируем в JSON массив: [«a»,»b»,»c»]
> else
$data = [ ‘name’ => ‘God’, ‘age’ => -1 ];
// декодируем в JSON объект:
>
header(‘Content-type: application/json’);
echo json_encode( $data );
Ответ 3
Согласно руководству по методу json_encode, он может возвращать нестроковый ответ ( false ): Возвращает строку в кодировке JSON в случае успеха или FALSE, если ошибка .
Когда это произойдет, echo json_encode($data) будет выведена пустая строка, которая является недопустимым JSON .
json_encode, например, завершится с ошибкой (и вернет false ), если его аргумент содержит строку, отличную от UTF-8.
Это состояние ошибки должно быть зафиксировано в PHP, например, следующим образом:
header(«Content-Type: application/json»);
// Соберите все необходимое в переменную $data.
$json = json_encode($data);
if ($json === false)
// Избегайте эха пустой строки (которая является недействительным JSON)
$json = json_encode([«jsonError» => json_last_error_msg()]);
if ($json === false)
// Этого не должно быть, но мы идем до конца:
$json = »;
>
// Установка кода статуса ответа HTTP: 500 — Внутренняя ошибка сервера http_response_code(500);
>
echo $json;
?>
Тогда принимающая сторона, конечно же, должна знать, что наличие свойства jsonError указывает на состояние ошибки, которое она должна обрабатывать соответствующим образом.
В производственном режиме может быть лучше отправлять клиенту только общий статус ошибки и регистрировать более конкретные сообщения об ошибках для дальнейшего исследования.
Дополнительные сведения о работе с ошибками JSON см. в документации PHP .
Ответ 3
Также хорошо установить безопасность доступа — просто замените «*» на домен, к которому вы хотите получить доступ.
header(‘Access-Control-Allow-Origin: *’);
header(‘Content-type: application/json’);
$response = array();
$response[0] = array(
‘id’ => ‘1’,
‘value1’=> ‘value1’,
‘value2’=> ‘value2’
);
echo json_encode($response);
?>
Ответ 4
На этот вопрос было много ответов, но ни один из них не охватывает весь процесс возврата чистого JSON со всем необходимым для предотвращения искажения ответа JSON.
function returnJsonHttpResponse($success, $data)
// удалите любую строку, которая может создать недопустимый JSON
// такие как PHP Notice, Warning, logs.
ob_clean();
// это очистит все ранее добавленные заголовки, чтобы начать с чистого листа
header_remove();
// Установите тип содержимого JSON и charset
// (charset может быть установлен на что-то другое)
header(«Content-type: application/json; charset=utf-8»);
// Установите код ответа HTTP, 2xx = SUCCESS,
// любой другой будет ошибкой, обратитесь к документации HTTP
if ($success)
http_response_code(200);
> else
http_response_code(500);
>
// кодируйте ваш объект или массив PHP в строку JSON.
// stdClass или массив
echo json_encode($data);
exit();
>
Ответ 5
Простая функция для возврата ответа JSON с кодом состояния HTTP .
function json_response($data=null, $httpStatus=200)
header_remove();
header(«Content-Type: application/json»);
http_response_code($httpStatus);
echo json_encode($data);
exit();
>
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
json_decode
Принимает закодированную в JSON строку и преобразует её в PHP-значение.
Список параметров
Строка ( string ) json для декодирования.
Функция работает только со строками в кодировке UTF-8.
Замечание:
PHP реализует надмножество JSON, который описан в первоначальном » RFC 7159.
associative
Если true , объекты JSON будут возвращены как ассоциативные массивы ( array ); если false , объекты JSON будут возвращены как объекты ( object ). Если null , объекты JSON будут возвращены как ассоциативные массивы ( array ) или объекты ( object ) в зависимости от того, установлена ли JSON_OBJECT_AS_ARRAY в flags .
Максимальная глубина вложенности структуры, для которой будет производиться декодирование. Значение должно быть больше 0 и меньше или равно 2147483647 .
Битовая маска из констант JSON_BIGINT_AS_STRING , JSON_INVALID_UTF8_IGNORE , JSON_INVALID_UTF8_SUBSTITUTE , JSON_OBJECT_AS_ARRAY , JSON_THROW_ON_ERROR . Поведение этих констант описаны на странице JSON-констант.
Возвращаемые значения
Возвращает данные json , преобразованные в соответствующие типы PHP. Значения true , false и null возвращаются как true , false и null соответственно. null также возвращается, если json не может быть преобразован или закодированные данные содержат вложенных уровней больше, чем указанный предел вложенности.
Ошибки
Начиная с PHP 8.0.0, если значение параметра depth выходит за пределы допустимого диапазона, функция выбрасывает исключение ValueError ; ранее выдавалась ошибка уровня E_WARNING .
Список изменений
| Версия | Описание |
|---|---|
| 7.3.0 | Добавлена константа JSON_THROW_ON_ERROR для параметра flags . |
| 7.2.0 | associative теперь nullable. |
| 7.2.0 | Добавлены константы JSON_INVALID_UTF8_IGNORE и JSON_INVALID_UTF8_SUBSTITUTE для параметра flags . |
| 7.1.0 | Пустой ключ JSON («») будет преобразован в пустое свойство объекта, а не в свойство со значением _empty_ . |
Примеры
Пример #1 Примеры использования json_decode()
var_dump ( json_decode ( $json ));
var_dump ( json_decode ( $json , true ));
Результат выполнения данного примера:
object(stdClass)#1 (5) < ["a"] =>int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) > array(5) < ["a"] =>int(1) ["b"] => int(2) ["c"] => int(3) ["d"] => int(4) ["e"] => int(5) >
Пример #2 Доступ к свойствам объектов с неправильными именами
Доступ к элементам объекта, которые содержат символы, недопустимые в соответствии с соглашением об именах PHP (то есть дефис), может быть выполнен путём обрамления имени элемента фигурными скобками и апострофами.
$obj = json_decode ( $json );
print $obj ->< 'foo-bar' >; // 12345
Пример #3 Распространённая ошибка при использовании json_decode()
// Следующие строки являются валидным кодом JavaScript, но не валидными JSON-данными
// Имя и значение должны помещаться в двойные кавычки
// Одинарные кавычки использовать нельзя
$bad_json = «< 'bar': 'baz' >» ;
json_decode ( $bad_json ); // null
// Имя должно обрамляться в двойные кавычки
$bad_json = ‘< bar: "baz" >‘ ;
json_decode ( $bad_json ); // null
// Не должно быть завершающей запятой (без последующего элемента)
$bad_json = ‘< bar: "baz", >‘ ;
json_decode ( $bad_json ); // null
Пример #4 Ошибки с глубиной вложенных объектов ( depth )
// Закодируем данные с глубиной вложенности 4 (array -> array -> array -> string).
$json = json_encode (
array(
1 => array(
‘English’ => array(
‘One’ ,
‘January’
),
‘French’ => array(
‘Une’ ,
‘Janvier’
)
)
)
);
?php
// Напечатаем ошибки для разных глубин.
var_dump ( json_decode ( $json , true , 4 ));
echo ‘Последняя ошибка: ‘ , json_last_error_msg (), PHP_EOL , PHP_EOL ;
var_dump ( json_decode ( $json , true , 3 ));
echo ‘Последняя ошибка: ‘ , json_last_error_msg (), PHP_EOL , PHP_EOL ;
?>
Результат выполнения данного примера:
array(1) < [1]=>array(2) < ["English"]=>array(2) < [0]=>string(3) "One" [1]=> string(7) "January" > ["French"]=> array(2) < [0]=>string(3) "Une" [1]=> string(7) "Janvier" > > > Последняя ошибка: No error NULL Последняя ошибка: Maximum stack depth exceeded
Пример #5 json_decode() с большими целыми числами
var_dump ( json_decode ( $json ));
var_dump ( json_decode ( $json , false , 512 , JSON_BIGINT_AS_STRING ));
Результат выполнения данного примера:
object(stdClass)#1 (1) < ["number"]=>float(1.2345678901235E+19) > object(stdClass)#1 (1) < ["number"]=>string(20) "12345678901234567890" >
Примечания
Замечание:
Спецификация JSON — это не JavaScript, а его подмножество.
Замечание:
В случае возникновения ошибки декодирования можно использовать json_last_error() для определения её причины.
Смотрите также
- json_encode() — Возвращает JSON-представление данных
- json_last_error() — Возвращает последнюю ошибку
User Contributed Notes 8 notes
1 year ago
JSON can be decoded to PHP arrays by using the $associative = true option. Be wary that associative arrays in PHP can be a «list» or «object» when converted to/from JSON, depending on the keys (of absence of them).
You would expect that recoding and re-encoding will always yield the same JSON string, but take this example:
$json = »;
$array = json_decode($json, true); // decode as associative hash
print json_encode($array) . PHP_EOL;
This will output a different JSON string than the original:
The object has turned into an array!
Similarly, a array that doesn’t have consecutive zero based numerical indexes, will be encoded to a JSON object instead of a list.
$array = [
‘first’,
‘second’,
‘third’,
];
print json_encode($array) . PHP_EOL;
// remove the second element
unset($array[1]);
print json_encode($array) . PHP_EOL;
The output will be:
The array has turned into an object!
In other words, decoding/encoding to/from PHP arrays is not always symmetrical, or might not always return what you expect!
On the other hand, decoding/encoding from/to stdClass objects (the default) is always symmetrical.
Arrays may be somewhat easier to work with/transform than objects. But especially if you need to decode, and re-encode json, it might be prudent to decode to objects and not arrays.
If you want to enforce an array to encode to a JSON list (all array keys will be discarded), use:
If you want to enforce an array to encode to a JSON object, use:
json_encode
Возвращает строку, содержащую JSON-представление для указанного value . Если параметр является массивом ( array ) или объектом ( object ), он будет рекурсивно сериализован.
Если сериализуемое значение является объектом, то по умолчанию будут включены только публично видимые свойства. В качестве альтернативы класс может реализовать интерфейс JsonSerializable для управления тем, как его значения сериализуются в JSON .
На кодирование влияет параметр flags и, кроме того, кодирование значений типа float зависит от значения serialize_precision.
Список параметров
value — значение, которое будет закодировано. Может быть любого типа, кроме resource.
Функция работает только с кодировкой UTF-8.
Замечание:
PHP реализует надмножество JSON, который описан в первоначальном » RFC 7159.
Битовая маска, составляемая из значений JSON_FORCE_OBJECT , JSON_HEX_QUOT , JSON_HEX_TAG , JSON_HEX_AMP , JSON_HEX_APOS , JSON_INVALID_UTF8_IGNORE , JSON_INVALID_UTF8_SUBSTITUTE , JSON_NUMERIC_CHECK , JSON_PARTIAL_OUTPUT_ON_ERROR , JSON_PRESERVE_ZERO_FRACTION , JSON_PRETTY_PRINT , JSON_UNESCAPED_LINE_TERMINATORS , JSON_UNESCAPED_SLASHES , JSON_UNESCAPED_UNICODE , JSON_THROW_ON_ERROR . Смысл этих констант объясняется на странице JSON-констант.
Устанавливает максимальную глубину. Должен быть больше нуля.
Возвращаемые значения
Возвращает строку ( string ), закодированную JSON или false в случае возникновения ошибки.
Список изменений
| Версия | Описание |
|---|---|
| 7.3.0 | Добавлена константа JSON_THROW_ON_ERROR для параметра flags . |
| 7.2.0 | Добавлены константы JSON_INVALID_UTF8_IGNORE и JSON_INVALID_UTF8_SUBSTITUTE для параметра flags . |
| 7.1.0 | Добавлена константа JSON_UNESCAPED_LINE_TERMINATORS для параметра flags . |
| 7.1.0 | При кодировании чисел с плавающей точкой ( float ) используется serialize_precision вместо precision. |
Примеры
Пример #1 Пример использования json_encode()
$arr = array( ‘a’ => 1 , ‘b’ => 2 , ‘c’ => 3 , ‘d’ => 4 , ‘e’ => 5 );
?php
echo json_encode ( $arr );
?>
Результат выполнения данного примера:
Пример #2 Пример использования json_encode() с опциями
echo «Обычно: » , json_encode ( $a ), «\n» ;
echo «Теги: » , json_encode ( $a , JSON_HEX_TAG ), «\n» ;
echo «Апострофы: » , json_encode ( $a , JSON_HEX_APOS ), «\n» ;
echo «Кавычки: » , json_encode ( $a , JSON_HEX_QUOT ), «\n» ;
echo «Амперсанды: » , json_encode ( $a , JSON_HEX_AMP ), «\n» ;
echo «Юникод: » , json_encode ( $a , JSON_UNESCAPED_UNICODE ), «\n» ;
echo «Все: » , json_encode ( $a , JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ), «\n\n» ;
echo «Отображение пустого массива как массива: » , json_encode ( $b ), «\n» ;
echo «Отображение неассоциативного массива как объекта: » , json_encode ( $b , JSON_FORCE_OBJECT ), «\n\n» ;
$c = array(array( 1 , 2 , 3 ));
echo «Отображение неассоциативного массива как массива: » , json_encode ( $c ), «\n» ;
echo «Отображение неассоциативного массива как объекта: » , json_encode ( $c , JSON_FORCE_OBJECT ), «\n\n» ;
$d = array( ‘foo’ => ‘bar’ , ‘baz’ => ‘long’ );
echo «Ассоциативный массив всегда отображается как объект: » , json_encode ( $d ), «\n» ;
echo «Ассоциативный массив всегда отображается как объект: » , json_encode ( $d , JSON_FORCE_OBJECT ), «\n\n» ;
?>
Результат выполнения данного примера:
Обычно: [«»,»‘bar'»,»\»baz\»»,»&blong&»,»\u00e9″] Теги: [«\u003Cfoo\u003E»,»‘bar'»,»\»baz\»»,»&blong&»,»\u00e9″] Апострофы: [«»,»\u0027bar\u0027″,»\»baz\»»,»&blong&»,»\u00e9″] Кавычки: [«»,»‘bar'»,»\u0022baz\u0022″,»&blong&»,»\u00e9″] Амперсанды: [«»,»‘bar'»,»\»baz\»»,»\u0026blong\u0026″,»\u00e9″] Юникод: [«»,»‘bar'»,»\»baz\»»,»&blong&»,»é»] Все: [«\u003Cfoo\u003E»,»\u0027bar\u0027″,»\u0022baz\u0022″,»\u0026blong\u0026″,»é»] Отображение пустого массива как массива: [] Отображение неассоциативного массива как объекта: <> Отображение неассоциативного массива как массива: [[1,2,3]] Отображение неассоциативного массива как объекта: > Ассоциативный массив всегда отображается как объект: Ассоциативный массив всегда отображается как объект:
Пример #3 Пример использования опции JSON_NUMERIC_CHECK
echo «Строки, содержащие числа преобразуются в числа» . PHP_EOL ;
$numbers = array( ‘+123123’ , ‘-123123’ , ‘1.2e3’ , ‘0.00001’ );
var_dump (
$numbers ,
json_encode ( $numbers , JSON_NUMERIC_CHECK )
);
echo «Строки, содержащие некорректно заданные числа» . PHP_EOL ;
$strings = array( ‘+a33123456789’ , ‘a123’ );
var_dump (
$strings ,
json_encode ( $strings , JSON_NUMERIC_CHECK )
);
?>?php
Результатом выполнения данного примера будет что-то подобное:
Строки, содержащие числа преобразуются в числа array(4) < [0]=>string(7) "+123123" [1]=> string(7) "-123123" [2]=> string(5) "1.2e3" [3]=> string(7) "0.00001" > string(28) "[123123,-123123,1200,1.0e-5]" Строки, содержащие некорректно заданные числа array(2) < [0]=>string(13) "+a33123456789" [1]=> string(4) "a123" > string(24) "["+a33123456789","a123"]"
Пример #4 Пример с последовательными индексами, начинающимися с нуля, и непоследовательными индексами массивов
echo «Последовательный массив» . PHP_EOL ;
$sequential = array( «foo» , «bar» , «baz» , «blong» );
var_dump (
$sequential ,
json_encode ( $sequential )
);
?php
echo PHP_EOL . «Непоследовательный массив» . PHP_EOL ;
$nonsequential = array( 1 => «foo» , 2 => «bar» , 3 => «baz» , 4 => «blong» );
var_dump (
$nonsequential ,
json_encode ( $nonsequential )
);
echo PHP_EOL . «Последовательный массив с одним удалённым индексом» . PHP_EOL ;
unset( $sequential [ 1 ]);
var_dump (
$sequential ,
json_encode ( $sequential )
);
?>
Результат выполнения данного примера:
Последовательный массив array(4) < [0]=>string(3) "foo" [1]=> string(3) "bar" [2]=> string(3) "baz" [3]=> string(5) "blong" > string(27) "["foo","bar","baz","blong"]" Непоследовательный массив array(4) < [1]=>string(3) "foo" [2]=> string(3) "bar" [3]=> string(3) "baz" [4]=> string(5) "blong" > string(43) "" Последовательный массив с одним удалённым индексом array(3) < [0]=>string(3) "foo" [2]=> string(3) "baz" [3]=> string(5) "blong" > string(33) ""
Пример #5 Пример использования опции JSON_PRESERVE_ZERO_FRACTION
var_dump ( json_encode ( 12.0 , JSON_PRESERVE_ZERO_FRACTION ));
var_dump ( json_encode ( 12.0 ));
?>?php
Результат выполнения данного примера:
string(4) "12.0" string(2) "12"
