bonjour,
j'ai fait un systeme de long polling couplé avec une app symfony2 et lorsque j'ouvre la page sur 2 onglet different dans le meme navigateur le 2eme onglé ne se charge pas (un autre navigateur ca marche).
J'ai fait le meme script dans une app non symfony et aucun probleme.
Quand je dit que ca se charge pas je veux dire que il est dans une boucle infinie.
La fonction php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public function getDetailJsonAction(){ if(!$this->container->get('request')->isXmlHttpRequest()) { return $this->redirect($this->generateUrl('THOoPadBundle_homepage')); } set_time_limit(0); $request = Request::createFromGlobals(); $dir = __DIR__.'/../../../../web/pushfile/'; if($request->query->get('id') != 'null'){ $name = $request->query->get('id').".push"; }else{ $name = "global.push"; } if($request->query->get('timestamp') != 'null'){ $lastModifCurrentUser = $request->query->get('timestamp'); }else{ $lastModifCurrentUser = 0; } if (file_exists($dir.$name)){ $lastModifAll = filemtime($dir.$name); } while($lastModifAll <= $lastModifCurrentUser){ usleep(10000); clearstatcache(); $lastModifAll = filemtime($dir.$name); } $response = new \Symfony\Component\HttpFoundation\Response(); $response->headers->set('Content-Type', 'application/json'); $encheres = $this->getDoctrine()->getEntityManager()->getRepository('THOoPadBundle:Enchere')->getEnchereForIndex(); $datenow = new \DateTime(); $datenow = $datenow->getTimestamp(); $json = json_encode(array( 'timestamp' => $lastModifAll, 'timenow' => $datenow, 'encheres' => $encheres, )); $response->setContent($json); return $response; }
Le js :
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 function pushEnchere(url, timestamp, id){ $.ajax({ type: "get", data: {timestamp: timestamp, id: id}, url: url, async: true, cache: false, dataType: 'json', success: function(data){ timestamp = data.timestamp; divenchere.removeAttr('hidden'); for (var i in data.encheres) { divenchere.append('id: '+data.encheres[i].id); } pushEnchere(url, timestamp, id); }, error: function(){ //pushEnchere(url, timestamp, id); } }); } $(document).ready(function() { $('a[produit_id]').bind("click", {}, addEnchere()); divenchere = $('.enchere'); urlservice = $('div[urlservice]').html(); var timestamp = null; pushEnchere(urlservice, timestamp, null); });
Partager