Максимальный размер объекта JSON? - PullRequest
14 голосов
/ 09 октября 2009

Используя jquery, я могу отправлять объекты json с клиента на сервер, используя ajax:

var strJSON = '{"event":[{
    "dates":[
        "2009-10-14","2009-10-15"],
   "teams":[
        {"id":"0","country":"USA","state":"CA","name":"California Polytechnic State University","subteam":""},
        {"id":"1","country":"USA","state":"CA","name":"California State University, Bakersfield","subteam":""},
        {"id":"2","country":"USA","state":"CA","name":"California State University, Fresno","subteam":""},
        {"id":"3","country":"USA","state":"CA","name":"California State University, Fullerton","subteam":""}]
}]}';

$.ajax({
    url: '../ajax/save_event',
    type: 'POST',
    data: { data : strJSON },
    dataType: 'json',
    timeout: 8000,
    cache: false
});

Работает хорошо. Но если строка JSON становится намного больше (не точно точный размер, но где-то в 5 раз больше), данные $ _POST, полученные сервером, будут пустыми. Кто-нибудь знает почему?

Я использую Apache / PHP / jquery. Это происходит как из IE, так и из Firefox. Где-то мне нужно настроить конфиг?

Вот пример строки, которая не может пройти через:

{"events":[{"dates":["2009-10-10","2009-10-11","2009-10-12"],"divisions":[{"level":"Collegiate","name":"Varsity","subdivision":"Division I","rounds":[],"teams":[{"id":"0","country":"USA","state":"CA","name":"California Polytechnic State University","subteam":""},{"id":"1","country":"USA","state":"CA","name":"California State University, Bakersfield","subteam":""},{"id":"2","country":"USA","state":"CA","name":"California State University, Fresno","subteam":""},{"id":"3","country":"USA","state":"CA","name":"California State University, Fullerton","subteam":""},{"id":"4","country":"USA","state":"CA","name":"Stanford University","subteam":""},{"id":"5","country":"USA","state":"CA","name":"University of California, Davis","subteam":""},{"id":"6","country":"USA","state":"CA","name":"San Francisco State University","subteam":""},{"id":"7","country":"USA","state":"CA","name":"Lassen Community College","subteam":""},{"id":"8","country":"USA","state":"CA","name":"Menlo College","subteam":""},{"id":"9","country":"USA","state":"CA","name":"Fresno Pacific University","subteam":""},{"id":"10","country":"USA","state":"CA","name":"Bakersfield","subteam":""},{"id":"11","country":"USA","state":"CA","name":"Buchanan","subteam":""},{"id":"12","country":"USA","state":"CA","name":"Campolindo-Moraga","subteam":""},{"id":"13","country":"USA","state":"CA","name":"Fremont-Sunnyvale","subteam":""},{"id":"14","country":"USA","state":"CA","name":"Ponderosa-Shingle Springs","subteam":""},{"id":"15","country":"USA","state":"CA","name":"West Covina","subteam":""},{"id":"16","country":"USA","state":"CA","name":"Gilroy","subteam":""},{"id":"17","country":"USA","state":"CA","name":"San José State University","subteam":""},{"id":"18","country":"USA","state":"CA","name":"University of California, Los Angeles","subteam":""},{"id":"19","country":"USA","state":"CA","name":"Sierra College","subteam":""},{"id":"20","country":"USA","state":"CA","name":"Selma","subteam":""},{"id":"21","country":"USA","state":"CA","name":"Liberty","subteam":""}],}]}]}

Он создан с использованием "stringify" на json.org:

var strJSON = JSON.stringify(oEvent);

EDIT: В дальнейшем, я изменил dataType на «текст» и попытался отправить длинную строку чисел. Он работает до ~ 3500 символов, затем дросселирует (и когда я говорю «дроссель», я имею в виду, что запрос приходит на сервер с нулевым $ _POST.)

Мой PHP post_max_size - 64M, так что это не так. Кто-то предложил использовать «LimitRequestBody» Apache, которого нет в httpd.conf, поэтому я добавил к нему «LimitRequestBody 0» и перезагрузил Apache. Это тоже не помогло.

Любые другие предложения ???

Ответы [ 4 ]

6 голосов
/ 09 октября 2009

Вероятно, это связано с конфигурацией вашего сервера. Проверьте php.ini для параметра max_post_size и убедитесь, что он достаточно велик для размещения ваших данных. Также проверьте настройки вашего веб-сервера - Apache имеет директиву LimitRequestBody, которая может быть причиной вашей проблемы. Наконец, проверьте ваш веб-сервер и журналы ошибок PHP, чтобы увидеть, вызывает ли большой пост какие-либо ошибки.

3 голосов
/ 05 октября 2011

Просто пара указателей для всех, кто найдет эту страницу - я столкнулся с подобной проблемой, когда строку JSON не удалось проанализировать с помощью jQuery.parseJSON().

Мне стыдно сказать, что моя проблема (вероятно, не связанная с проблемой ОП) на самом деле была вызвана случайной одинарной кавычкой. Выход из него решил проблему. Я изначально думал, что это связано с длиной строки, так как кажется, что это происходит только со строкой JSON длиной 8000 символов, но это была случайная кавычка, заканчивающая строку в неправильном месте.

Тим, я не знаю, добрались ли вы когда-нибудь до сути своей первоначальной проблемы, но вставьте строку, которую вы предоставили:

{"events":[{"dates":["2009-10-10","2009-10-11","2009-10-12"],"divisions":[{"level":"Collegiate","name":"Varsity","subdivision":"Division I","rounds":[],"teams":[{"id":"0","country":"USA","state":"CA","name":"California Polytechnic State University","subteam":""},{"id":"1","country":"USA","state":"CA","name":"California State University, Bakersfield","subteam":""},{"id":"2","country":"USA","state":"CA","name":"California State University, Fresno","subteam":""},{"id":"3","country":"USA","state":"CA","name":"California State University, Fullerton","subteam":""},{"id":"4","country":"USA","state":"CA","name":"Stanford University","subteam":""},{"id":"5","country":"USA","state":"CA","name":"University of California, Davis","subteam":""},{"id":"6","country":"USA","state":"CA","name":"San Francisco State University","subteam":""},{"id":"7","country":"USA","state":"CA","name":"Lassen Community College","subteam":""},{"id":"8","country":"USA","state":"CA","name":"Menlo College","subteam":""},{"id":"9","country":"USA","state":"CA","name":"Fresno Pacific University","subteam":""},{"id":"10","country":"USA","state":"CA","name":"Bakersfield","subteam":""},{"id":"11","country":"USA","state":"CA","name":"Buchanan","subteam":""},{"id":"12","country":"USA","state":"CA","name":"Campolindo-Moraga","subteam":""},{"id":"13","country":"USA","state":"CA","name":"Fremont-Sunnyvale","subteam":""},{"id":"14","country":"USA","state":"CA","name":"Ponderosa-Shingle Springs","subteam":""},{"id":"15","country":"USA","state":"CA","name":"West Covina","subteam":""},{"id":"16","country":"USA","state":"CA","name":"Gilroy","subteam":""},{"id":"17","country":"USA","state":"CA","name":"San José State University","subteam":""},{"id":"18","country":"USA","state":"CA","name":"University of California, Los Angeles","subteam":""},{"id":"19","country":"USA","state":"CA","name":"Sierra College","subteam":""},{"id":"20","country":"USA","state":"CA","name":"Selma","subteam":""},{"id":"21","country":"USA","state":"CA","name":"Liberty","subteam":""}],}]}]}

into http://json.parser.online.fr/ выдает следующую ошибку, если это поможет кому-либо еще:

SyntaxError: JSON.parse: expected double-quoted property name

2 голосов
/ 12 октября 2009

Кажется, что есть проблема с размером, при тестировании моей строки Json все работает, когда строка мала, когда я увеличиваю строку (массив php для кодирования), вывод строки Json обрезается.

при выполнении длины строки с ошибочной строкой я получаю (7796). Поэтому я изменил параметр max post в ini-файле для cli и apache на 64M вместо 8M, и у меня все еще возникает та же проблема. Я не думаю, что эта проблема ограничена apache LimitRequestBody, так как PHP дает такой же вывод на CLI.

Еще одна вещь, когда я выполняю var_dump для закодированной строки json, я вижу, когда она обрезается, а теги json не закрываются, и поэтому декодер Json возвращает ноль.

Например,

$strJson = file_get_contents('http://mydomain/page');
var_dump($strJson);

Вы увидите, где обрезается строка, и к концу вывода добавляется ноль.

1 голос
/ 27 октября 2011

Тип данных «jsonp» не использует метод POST и не может его использовать. Вместо этого все данные передаются в строке запроса. Таким образом, если максимальная длина строки запроса сервера будет превышена, данные не будут переданы. Причина этого в том, что jQuery загружает данные json как узел в ваш HTML-документ, и это можно сделать только как GET. Если вам нужно больше данных, вам придется использовать XML или другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...