Estoy buscando hacer un sondeo largo para "enviar" algunos datos al cliente y también estoy realizando otras llamadas AJAX al servidor en paralelo con el sondeo largo. Parece que mis otras llamadas AJAX no se completarán hasta que la encuesta larga haya recibido una respuesta (ya sea por respuesta o tiempo de espera). Cuando paso por el Javascript, parece que la segunda solicitud de AJAX se envía en el momento adecuado, pero la respuesta no se recibe hasta que la solicitud de encuesta larga obtiene una respuesta. ¿Alguna idea de lo que está pasando?Encuesta larga bloqueando otras llamadas AJAX
Este es el código para la porción de votación larga:
lado del servidor:
function getPlaylistTracksIfChanged($playlist_id, $numClientTracks) {
$reportChange = false;
for($i = 0; $i < 10; $i++) {
$numServerTracks = $this->PlaylistTrack->find('count', array(
'conditions' => array('playlist_id' => $playlist_id)
)
);
if($numClientTracks != $numServerTracks) {
$reportChange = true;
break;
}
sleep(3);
}
if($reportChange) {
$playlist_tracks = $this->PlaylistTrack->find('all', array(
'conditions' => array('playlist_id' => $playlist_id),
'order' => array('PlaylistTrack.position')
)
);
$this->set('playlist_tracks', $playlist_tracks);
$this->layout = false;
$this->render('show_playlist_tracks_list');
} else {
$this->autoRender = false;
return 'false';
}
}
lado del cliente:
function checkForChangesOnServer() {
$.post('/getResultsIfChanged/' + playlist_id + '/' + $('#sortable_tracks').children().size(), function(results) {
if(results == 'false') {
//alert('no change');
} else {
//alert('change');
}
checkForPlaylistChangesOnServer();
});
}
Y una muestra de otra llamada AJAX:
Lado del servidor:
function getLibraryTracksStartingWithLetter($user_id, $letter) {
$results = $this->Track->find(
'all',
array(
'conditions' => array(
'user_id' => $user_id,
'OR' => array(
'Track.artist LIKE' => $letter . '%',
'Track.name LIKE' => $letter . '%'
)
),
'order' => array('case when Track.artist = "" then 1 else 0 end', 'Track.artist', 'Track.name')
)
);
$this->set('results', $results);
$this->layout = false;
$this->render('show_library_results_list');
}
lado del cliente:
function loadLibraryResultsForLetter(letter) {
highlightLetterFilter(letter);
$.post('/getLibraryTracksStartingWithLetter/' + user_id + '/' + letter, function(results) {
updateLibraryResults(results);
});
}
no sabía nada de las cosas que se enfríe – RageZ
@RageZ: todos los desarrolladores de PHP debe coger este problema :-) – zerkms
tiene sentido ahora estoy pensando en ello – RageZ