#php #javascript #json
#php #javascript #json
Вопрос:
У меня есть массив в JavaScript, который grossIncome
.Этот массив содержит 6 элементов. Теперь я хочу отправить этот массив на другую страницу PHP, используя $.ajax
метод, но как я могу закодировать этот массив в формате JSON?
Ответ №1:
Используйте JSON.stringify()
(если вы хотите поддерживать старые браузеры, вы должны включить этот файл от Douglas Crockford):
$.ajax(
{
"url": "some_script.php",
"data": {json: JSON.stringify(gossIncome)},
"success": function()
{
// Do something!
}
});
В PHP-скрипте вы могли бы декодировать его с помощью json_decode
:
<?php
$json = isset($_GET['json']) ? $_GET['json'] : exit('No JSON passed!');
$array = json_decode($json);
if ( json_last_error() != JSON_ERROR_NONE )
exit('JSON invalid!');
?>
Комментарии:
1. Не забудьте включить необходимый JS-файл — вы можете найти его по адресу github.com/douglascrockford/JSON-js
2. Спасибо отредактировано. Но на самом деле все современные браузеры поддерживают
JSON.stringify()
без каких-либо библиотек.3. Лучше:
data: {json: JSON.stringify(gossIncome)}
.
Ответ №2:
попробуйте что-нибудь вроде json_encode();
Ответ №3:
Это должно выполнить задание: http://www.openjs.com/scripts/data/json_encode.php
Если вы используете jQuery или другие фреймворки JS, посмотрите на тамошние репозитории плагинов, обычно у них есть класс JSON для де-/ кодирования массивов / объектов…
Ответ №4:
Технически массив уже находится в JSON
, хотя для передачи через HTTP
в файл вам потребуется сериализовать данные, чтобы сохранить значения пары имен в виде строки. К счастью, jQuery
имеет встроенный param()
метод. Вы могли бы использовать его следующим образом:
$.ajax({
url: 'path/to/file.php',
type: 'POST',
data: $.param(grossIncome),
success: function(msg) {
console.log(msg); // or whatever
}
});
К сожалению, param()
in полезен только для массивов в виде карт объектов … ie:
var grossIncome = {
valueOne: "123",
valueTwo: "321"
};
Комментарии:
1.
grossIncome
похоже, что это массив, вы не можете вызватьserialize
его.2. Вау, я немного поработал с этим, и ты абсолютно прав. Я мог бы поклясться, что использовал
serialize()
для этой цели раньше, но, очевидно, я ошибаюсь. Спасибо за подсказку, и я изменил свой ответ.