来自PHP的Ajax多个回声

时间:2013-02-15 09:50:52

标签: php jquery ajax

说,我有一个像这样的php文件:

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

我有一个HTML表单。所以我想要的形式是在PHP脚本执行时在某些文本字段中打印回声,是否可以使用AJAX和JQuery?

我想要的是用户进入HTML页面,按下一些按钮,这个按钮运行PHP脚本,每次脚本到达回声时他都可以在文本字段中看到这个回声。一旦脚本结束 - 我想做一些JQuery动作,例如hide按钮。可能吗?概述算法是什么?谢谢!

更新的:
我需要在用户按下按钮时运行此脚本ONCE,但每次脚本到达下一个回显时更新文本字段,以便用户按下按钮一次,而不是在文本字段中看到“1”,在一秒钟内他将看到“2”,在几秒钟 - “3”。

5 个答案:

答案 0 :(得分:9)

不幸的是,由于success的{​​{1}}处理程序仅在请求完成后才会被调用,您无法执行“实时更新“.. :(

您所能做的就是在会话中保存当前状态,在每个回显处结束脚本并重新请求页面继续。

答案 1 :(得分: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
    }
    });

});

答案 2 :(得分:1)

您可以返回PHP为您创建的JSON字符串:

$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);

更多信息:

答案 3 :(得分:1)

使用两个php脚本的另一种解决方案:

  • 首先是您的实际数据,它会在会话中存储数据而不是回显它们
  • 第二个脚本将只回显存储在会话中的数据

javascript中的客户端将调用第一个脚本来启动主作业。然后调用第二个脚本来检查并显示进度。

检查会话的第二个脚本可以用两种方式编写:

  • 只检查并直接返回,有或没有新数据(您通过示例每秒调用它)
  • 如果有数据则直接返回,否则只是等待数据(或超时),当脚本返回时你只是回想起他

第二种解决方案更接近“实时”,并且会进行更少的ajax次呼叫。

答案 4 :(得分:0)

选项是使用WebSockets,它将允许PHP和Javascript之间的“实时”通信。

原生WebSockets仅受更新版本的现代浏览器支持,但有一些方法可供旧浏览器使用ajax / iframe / flash

来模拟

例如,socket.io客户端可以使用Internet Explorer 5.5。