Я полностью потерян с этой проблемой.
У меня есть запрос ajax, который получает ответ json. Запрос работает нормально в большинстве ситуаций, однако, кажется, что он останавливается, когда ответ json очень велик.
Проблема в том, что ответ заканчивается в форме:
...est":"test length"}]]}
HTTP/1.1 200 OK
Date: Wed, 21 Sep 2011 17:10:32 GMT
Server: Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.3.0
X-Powered-By: PHP/5.3.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=5, max=90
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
5b03d
{"ResultsInfo":{"RequestID":"131661886010","FeedCompletion":{"0":"100"}},"ResultsData":[[{"test":"test length"},{"test":"test length"},
...0
Символы ... представляют собой одно и то же "{" test ":" длина теста "}," строка
Таким образом, ответ, по-видимому, имеет вид:
- Последняя часть данных
- http заголовок ответа распечатывается в теле
- Символы '5b03d'
- Первая часть данных
- Символ '0'
НЕТ ТОЧНОЙ длины отклика, при которой это происходит, однако она вполне подходит для 360791 символа, но не для 372797 символов.
Я использую фреймворк Yii PHP , но искал повсюду и ничего не видел на форумах.
Мне кажется, что веб-сервер разделяет ответ на несколько частей или делает тайм-аут и начинает снова.
Или возможно максимальный размер возврата?
EDIT _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___
Я попробовал тип содержимого application / json, как это было предложено, но это все еще происходит. Текстовая часть заголовка, возвращаемая в теле, выглядит следующим образом (при использовании кодирования applciaiton / json):
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 08:48:28 GMT
Server: Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.3.0
X-Powered-By: PHP/5.3.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Keep-Alive: timeout=5, max=89
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
Как отключить кусочное кодирование для этого конкретного скрипта?
** РЕДАКТИРОВАТЬ 2_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _
Я добавил длину содержимого в мои заголовки, и полученный заголовок ответа все еще распечатывается в теле как:
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 11:55:39 GMT
Server: Apache/2.2.11 (Win32) mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.3.0
X-Powered-By: PHP/5.3.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 372797
Keep-Alive: timeout=5, max=90
Connection: Keep-Alive
Content-Type: application/json
Похоже, он больше не отправляется в виде фрагментов. Однако существует та же проблема: в ответе содержится содержимое, а затем напечатанный заголовок, а затем еще больше содержимого.
** Единственная разница в том, что в ответе нет символов «5b03d» или «0».
EDIT_3_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _
Как и просили, вот краткое изложение моего php-кода
$dataArray = array(
'ResultsData'=>array(
array('test'=>'test length'),
array('test'=>'test length'),
array('test'=>'test length'),
...
));
$return = json_encode($dataArray);
header('Content-Length: '.strlen($return));
header('Content-type: application/json');
echo $return;