2013-09-23 2 views
2

enter image description here enter image description hereдве функции ajax одновременно? не работает

У меня есть простой AJAX скрипт, который предполагает, чтобы вызвать PHP-файл и получить данные обратно.

window.addEvent('domready', function() { 
    $('dbform').addEvent('submit', function(e) { 
     new Event(e).stop(); 
     var intervalId =setInterval(function() 
     { 
      var Ajax2 = new Request({ 
       url: '/tools/getdata.php', 
       method: 'post', 
       data: 'read=true', 
       onComplete: function(response) 
       { 
        $('results').set('html', response); 
       } 
      }).send(); 
     },1000); 

     var postString = 'subbutton=' + $('subbutton').value; 
     var Ajax = new Request({ 
      url: '/tools/getdata.php', 
      method: 'post', 
      data: postString, 
      onRequest: function() 
      { 
       $('message').set('text', 'loading...'); 
      }, 
      onComplete: function(response) 
      { 
       $('message').set('text','completed'); 
       clearInterval(intervalId); 
      }, 
      onFailure: function() 
      { 
       $('message').set('text', 'ajax failed'); 
      } 
     }).send(); 
    }); 
}); 

Файл, который он представляет, также есть.

$object= new compare(); 
if(isset($_POST['subbutton'])=='Run') 
{ 
    // This take about 5 minutes to complete 
    $run=$object->do_compare(); 
} 

if(isset($_POST['read'])=='true') 
{ 
    /// in the mean time, the first ajax function is suppose to return data from here..while 
    // the do_compare() function finish. 
    // the problem is that it only return it once the do_compare() finish 
    /// 
    echo 'read==true'; 
} 

скрипт работает отлично, ожидать, что, когда запрос Ajax проверить файл каждую секунду, он не возвращает вещь от $_POST['read'], до $run=$object->do_compare(); закончил.

Почему это так? что то, что я пытаюсь сделать, состоит в том, что одна функция Ajax получает данные из функции do_compare, а другая функция ajax также независимо получает это из файла getdata.php.

+0

'isset()' возвращает '(bool) true' или' (bool) false 'try' if (isset ($ _ POST ['read']) && $ _POST ['read'] == 'true') ' – Christoph

+0

@Christoph Я только что обновил изображение вывода, если вы хотите его увидеть. –

+0

Этот javascript смущает меня. Это похоже на комбинацию raw JS, jQuery и Prototype. В какой библиотеке вы используете? – Izkata

ответ

2

Проблема заключается в строке:

if(isset($_POST['subbutton'])=='Run') 

IsSet возвращает булево истинным или ложным, так что если $_POST['subbutton'] установлено, чем возвращает истину, и из-за слабого типа системы PHP true == 'Run', потому что 'Run' оценивается как истина. Используйте

if(isset($_POST['subbutton']) && $_POST['subbutton'] === 'Run') 

и

if(isset($_POST['read']) && $_POST['read'] === 'true') 
+0

спасибо, но это не решило проблему, все равно дождаться завершения первого ajax :( –

+0

Я бы предположил, что это потому, что http не позволяет изменять порядок запросов. Это означает, что он должен ответить на запрос 1 перед запросом 2. Но это только подразумевает для каждого соединения. Браузеры используют по 2 подключения по умолчанию, так что по крайней мере один должен закончить раньше. Не знаю, извините. – Christoph

+0

ОК, не проблема, спасибо за вашу помощь –

0

Вы используете сессии в обработчиках PHP AJAX? Если это так, ваш файл сеанса, вероятно, заблокирован.

Во-вторых: Javascript внутренне одинаренен в браузере (см. Google для получения дополнительной информации).

+1

Javascript действительно однопоточный, поэтому ajax на самом деле асинхронный (по умолчанию). Это не должно быть проблемой. Но файлы сеансов звучат хорошо. Может быть, развертывание собственной системы сеанса может помочь. – Christoph

Смежные вопросы