Sono totalmente perso con questo problema.La risposta JSON molto lunga si arresta e invia le intestazioni HTTP come testo quindi continua
Ho una query ajax che ottiene una risposta JSON. La query funziona bene nella maggior parte delle situazioni, tuttavia sembra inciampare quando la risposta JSON è molto grande.
Il problema è la risposta finisce nella forma:
...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
Il ... rappresentare più della stessa "{" test ":" Lunghezza test "}," stringa
Così il reponse sembra essere in forma:
- Ultima parte dei dati di intestazione di risposta
- http stampati nel corpo
- dei personaggi 5b03d '
- prima parte dei dati
- Il carattere '0'
non c'è una esatta lunghezza della risposta che questo avviene a tuttavia è bene a 360791 caratteri ma non a 372797 caratteri.
Sto usando il framework PHP Yii, ma ho cercato in lungo e in largo e non ho visto nulla nei forum.
Mi sembra che il server web stia separando la risposta in più parti o ritentando e ricominciando.
O forse c'è una dimensione massima del reso?
EDIT _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___
Ho provato l'applicazione/tipo di contenuto JSON come suggerito ma sta succedendo. Tes parte di testo dell'intestazione che viene restituito nel corpo è il seguente (quando si utilizza applciaiton/JSON codifica):
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
Come faccio a disattivare la codifica Chunked per questo particolare script?
** EDIT 2_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _
ho aggiunto ora una lunghezza di contenuti ai miei intestazioni e l'intestazione della risposta che ottengo è ancora stampato nel corpo come:
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
così sembra che non viene più inviato come chunked. Tuttavia, lo stesso problema esiste: la risposta ha un contenuto quindi l'intestazione viene stampata e quindi più contenuti.
** L'unica differenza ora è che non ha i caratteri '5b03d' o '0' nella risposta.
EDIT_3_ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ _
come richiesto ecco un riassunto del mio codice 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;
Che aspetto ha il tuo codice PHP? Questo è molto insolito. –