Я полностью потерян с этой проблемой.
У меня есть запрос 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 «:» test length «}», строка
Таким образом, ответ, по-видимому, имеет вид:
НЕТ
Я использую структуру Yii PHP , но искал далеко и широко и ничего не видел на форумах.
Мне кажется, что веб-сервер разделяет ответ на несколько частей или тайм-аут и начинается снова.
Или возможно есть макс. размер возвращения?
EDIT_____________________________________
I попробовали 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
Как отключить кодировку с фрагментами для этого сценария?
* * EDIT 2_________________________________
I теперь добавили длину содержимого в заголовки, и заголовок ответа, который я получаю, все еще распечатывается в теле как:
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___________________________
As попросил, вот резюме моего 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;