2013-03-25 2 views
3

Мне нужно проверить, записаны ли команды в файл txt, чтобы обновить 3D-окно внутри моего веб-браузера. Это то, что известно как «push» техника или длинный опрос для уведомления клиента. Поскольку браузер должен быть Internet Explorer Я немного ограничен.Использование iframe для «длинного опроса» с использованием вызывающего мигающего браузера

У меня есть решение с использованием скрытого iframe, который вызывает скрипт php, который перезагружается каждую секунду, чтобы проверить файл txt.

<iframe noresize scrolling="no" frameborder="0" name="loader" src="loader.php"> 

loader.php в основном делает это:

//check txt and get commands 
<body onLoad="window.setInterval('location.reload()',1000);"></body> 

Единственная проблема, которую я вижу в том, что каждый второй в веб-браузере кнопку перезагрузки мигает. Хотя окно не мигает, просто кнопка, я все еще нахожу это немного раздражающим.

Есть ли лучшее решение для этой проблемы, все еще совместимое с IE?

ответ

5

Наконец, после многих попыток мне удалось сделать его работу, которая я считаю оптимальным стандартным решением: длинное голосовое решение ajax. Поскольку это дает много проблем в IE7, я буду вставлять мои коды ниже.

Сначала мой PHP-файл, который читает txt и перекликается с JSON с текстом.

<?php 
$commandFile = fopen("./command.txt","r"); 

fseek($commandFile, 0); 
$command = fscanf($commandFile, "%s\n"); //reads the command 
fclose($commandFile); 

if($command[0] != "") 
{ 
    $commandFile = fopen("./command.txt","w"); //delete first line 
    fclose(commandFile);  
    echo json_encode($command[0]); 
} 
?> 

Теперь главная страница HTML нужен механизм для вызова функции рекурсивно, что launchs этот PHP файл и проверяет ответ. Моя функция что-то вроде этого.

<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript" charset="utf-8"></script> 
</head> 
<body> 
<script type="text/javascript"> 
function longPolling() 
{ 
    $.ajaxSetup({ cache: false }); //This line is THE KEY to work under Internet Explorer 
    $.ajax({     
     type: "GET", 
      url: "loader.php", 
     dataType: 'json', 
     async: true, 

     success: function(response){         
      if(response!=""){ 
       sendCommand(response); //could be any other function   
      } 
      //longPolling(); 
      setTimeout(longPolling,1000); 
       }, 
     error: function(){ 
      //longPolling();    
      setTimeout(longPolling,1000); 
     } 

      }); 
    }; 

$(document).ready(function(){ /*waits till the whole page loads*/ 
    longPolling(); /*start the initial request*/ 
}); 
</script> 
</body> 
Смежные вопросы