1

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

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

我有一个 html 表单。所以我想要在这个表单中打印一些文本字段中的回声,而 PHP 脚本正在执行,AJAX 和 JQuery 是否可能?

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

更新
当用户按下按钮时,我需要运行此脚本一次,但每次脚本到达下一个回声时更新文本字段,以便用户按下按钮一次,然后他将在文本字段中看到“1”,一秒钟后他将看到“2” ,再过几秒钟 - “3”。

4

5 回答 5

9

不幸的是,由于只有在请求完成后才会调用success处理程序,因此您无法进行“实时更新”.. :(.ajax()

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

于 2013-02-15T09:53:14.823 回答
3

您可以使用两种方式将响应返回为json

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

并在客户端 jquerysuccess处理程序中

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

});

于 2013-02-15T10:16:16.983 回答
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);

更多信息:

于 2013-02-15T10:01:16.960 回答
1

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

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

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

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

  • 只检查并直接返回,有或没有新数据(你每秒调用一次)
  • 如果有数据直接返回,否则等待数据(或超时),当脚本返回时你只需调用他

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

于 2013-02-20T15:58:14.930 回答
0

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

本机 WebSockets 仅受较新版本的现代浏览器支持,但旧浏览器有一些方法可以模拟这一点,使用 ajax/iframe/flash

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

于 2013-02-15T09:56:41.560 回答