2013-02-15 2 views
1

Сая, у меня есть PHP-файл, как это:Ajax несколько отголосков из PHP

<?php 
echo 1; 
//some functions 
echo 2; 
//more code to execute 
echo 3; 
?> 

И у меня есть форма HTML. Итак, что я хочу в этой форме, это печатать эхо в каком-то текстовом поле, пока выполняется скрипт PHP, возможно ли это с помощью AJAX и JQuery?

Я хочу, чтобы пользователь входил в HTML-страницу, нажимал кнопку, эта кнопка запускает скрипт PHP, и каждый раз, когда скрипт достигает эха, он может видеть это эхо в текстовом поле. Когда сценарий окончен, я хочу сделать некоторые действия JQuery, например, скрытую кнопку. Является ли это возможным? Каким будет алгоритм обзора? Благодаря!

UPDATE:
мне нужно запустить этот скрипт один раз, когда пользователь нажимает кнопку, но обновление TextField каждый раз, когда скрипт доходит до следующего эхо-сигнала, так что пользователь нажимает кнопку один раз, чем он увидит «1» в текстовом поле, в секунду он увидит «2», через несколько секунд - «3».

+0

для запуска скрипта php каждый раз, когда вы нажимаете на кнопку, вам нужно сделать вызов ajax –

ответ

8

К сожалению, так как success обработчик .ajax() будет вызываться только после того, как запрос имеет закончил, вы не можете сделать «живое» обновление .. :(

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

0

Одним из вариантов является использование WebSockets, это позволит «в реальном времени» связь между вашим PHP и JavaScript.

Native WebSockets поддерживаются только в новых версиях современных браузеров, но есть какой-то способ для старых browsher подражать этому, используя AJAX/iframe/вспышки

по Exemple, клиент socket.io может работать с Internet Explorer 5.5.

1

Вы можете вернуть JSON-строку, PHP создает для вашего:

$values = array(); 
$values['first'] => 1; 
$values['second'] => 2; 
$values['third'] => 3; 
print json_encode(values); 

Чем хранить этот ответ в переменной JavaScript и использовать значение нему для обновления в определенное время:

var obj = jQuery.parseJSON(response); 
// as an example - to see where this goes 
setTimeout(function() { $('#example').html(obj.first); }, 1000); 

Дополнительная информация:

2

Вы можете использовать два пути либо вернуть ответ как json

$values = array(); 
$values['first'] => 1; 
$values['second'] => 2; 
$values['third'] => 3; 
print json_encode($values); 

и в стороне клиента JQuery success обработчика

$.ajax({ 
    url: 'yoururl', 
    type:'POST', 
    data :'{ if any }' 
    dataType:'json', /*most important**/ 
    success:function(data){ 
     console.log(data.first); //first value..etc 
    } 
    }); 

второго метода

Добавляет возвращать данные на стороне сервера

$return= ''; 
$return.=1."||"; 
$return.=2."||"; 
$return.=3; 
echo $return;exit; 

и в AJAX

$.ajax({ 
    url: 'yoururl', 
    type:'POST', 
    data :'{ if any }' 
    success:function(data){ 
     console.log(data.split("||")[0]); //first value..etc 
    } 
    }); 

});

1

Другим решением при использовании двух php сценариев:

  • первый ваш фактический один, который будет хранить вне данные в сессии вместо вторя им
  • второй сценарий будет только эхо данные, хранящиеся в сессии

Ваш клиент в javascript, вызывается первым сценарием для запуска основного задания. Затем вызовите второй скрипт, чтобы проверить и показать продвижение.

Второй сценарий, который проверяет сессию можно записать двумя способами:

  • только проверить и непосредственно вернуться, с или без новых данных (вы называете это каждый второй пример)
  • возвращение напрямую, если есть данные, иначе просто ждать данных (или тайм-аута), и когда сценарий возвращает вас просто вспомнить его

Второе решение ближе к «реальном времени» и будет делать гораздо меньше ajax вызовов.

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