我在使用php组合的jquery时遇到了一些问题。让我先从代码开始。
PHP代码:
if ($_POST["request"]==10)
progress();
function progress()
{
$files = getfiles();
$progress = 0;
$progressRate = 100/$files->number;
for ($i=0;$i<$files->number;$i++)
{
sendfile($files->location[$i]);
$progress+=$progressRate;
echo $progress;
}
}
代码输出: 例如files-&gt; number = 2则输出为50 100。
Jquery代码:
jQuery.post("functions.php",{request:10},function(data){
alert(data);
});
问题:我想要的是首先警告50,然后警告100,我的意思是当第一个循环在php结束并回声第一个进度值时,然后jquery应该能够拦截它,但jquery在整个循环结束后警告数据,这意味着我在一个警报中得到50100,jQuery有什么方法可以处理这个?我知道有其他解决方案使用PHP并生成例如隐藏div或属性中的循环数,然后在jQuery中使用循环,但我真的想直接这样做。
答案 0 :(得分:5)
这不是AJAX的工作方式。它只发出一个请求并对响应做了“某事”,就像浏览器导航到URL时一样。
PHP脚本将在服务器端执行,将结果打印到“屏幕”并作为响应发回。
如果要返回多个变量,则应将它们作为JSON数据返回,并在javascript中解析JSON字符串。
答案 1 :(得分:0)
jQuery(默认情况下实际上是AJAX)仅在服务器完成请求后才返回响应。
因此,无法对php页面执行单个请求并获得多个响应。 一种方法是使用带有upload progress支持的php,但我怀疑这对你的情况有帮助,因为它只是用于上传文件。