J'ai abordé cette question et a trouvé quelques vilains bugs que les gens peuvent trouver utile!
Une solution à l'aide du texte/html est simple...
FICHIER PHP
header('Content-type: text/html; charset=utf-8');
function output($val)
{
echo $val;
flush();
ob_flush();
usleep(500000);
}
output('Begin... (counting to 10)');
for( $i = 0 ; $i < 10 ; $i++ )
{
output($i+1);
}
output('End...');
FICHIER HTML
<!DOCTYPE>
<html>
<head>
<title>Flushed ajax test</title>
<meta charset="UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
var last_response_len = false;
$.ajax('./flushed-ajax.php', {
xhrFields: {
onprogress: function(e)
{
var this_response, response = e.currentTarget.response;
if(last_response_len === false)
{
this_response = response;
last_response_len = response.length;
}
else
{
this_response = response.substring(last_response_len);
last_response_len = response.length;
}
console.log(this_response);
}
}
})
.done(function(data)
{
console.log('Complete response = ' + data);
})
.fail(function(data)
{
console.log('Error: ', data);
});
console.log('Request Sent');
</script>
</body>
</html>
La modification de ce code en ajax est exactement le même.
Modifier le FICHIER PHP correspondant à la ligne 4 de echo $val;
de echo '{"name":"'.$val.'"};'
Changement de FICHIER HTML, ligne 24 console.log(this_response);
de
this_response = JSON.parse(this_response);
console.log(this_response.name);
Cela bien que le code s'affiche bien, et TOUT ce que nous avons fait, c'est enveloppée JSON autour d'une variable, il est plus complcated que cela.
Pour le long temps j'ai changé mon en-tête de application/json
Cependant, c'est le bug qui m'a fait une recherche sur google pendant 3 jours.
Lorsque la réponse est de type application/json, lorsque la réaction est COMPLÈTE, entièrement terminée. La réponse complète est tenté de analysée, pour vérifier s'il est en effet json.
Hovever notre réponse COMPLÈTE est {/bla json/}{/bla json/}{/bla json/}
Ce qui n'est PAS valide JSON
par conséquent, l' jqXHR.done
méthode suppose, il y avait une erreur, car la réponse complète ne peut pas être analysée comme JSON.
DONC, SI VOUS VOULEZ JSON DE TELS PROGRÈS
NE PAS DÉFINIR LE TYPE D'APPLICATION EN JSON!
Espérons que certaines personnes trouvent cela utile