代码如下啊,可是过了十秒钟后,jquery发起那个http请求的时候,那个请求却一直处于阻塞的状态,小弟才疏学浅,不明白其中的道理,跪求真相帝的出现。a.php<?php session_start(); ?>
<?php $_SESSION['hello'] = '我爱美女 !';?>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.js"></script>
<script type="text/javascript">
function test() {
setTimeout(function(){
$.post("test.php");
}, 10000);
}
test();
</script>
</head>
</html><?php $i = 0;
while(true){
$value = $_SESSION['NULL'];
echo ($value == NULL)? '我很空虚!-'. $i++ .'<br />' : $value;
sleep(1);
flush();
}test.php<?php
session_start(); $value = $_SESSION['hello']; echo $value;
<?php $_SESSION['hello'] = '我爱美女 !';?>
<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.js"></script>
<script type="text/javascript">
function test() {
setTimeout(function(){
$.post("test.php");
}, 10000);
}
test();
</script>
</head>
</html><?php $i = 0;
while(true){
$value = $_SESSION['NULL'];
echo ($value == NULL)? '我很空虚!-'. $i++ .'<br />' : $value;
sleep(1);
flush();
}test.php<?php
session_start(); $value = $_SESSION['hello']; echo $value;
?? 什么意思
我认为你想的效果应该这样写<?php $i = 0;
while(true){
$value = $_SESSION['hello'];
echo ($value == NULL)? '我很空虚!-'. $i++ .'<br />' : $value;
sleep(1);
flush();
}
这里的关键点就在于需要对session进行一次的访问。然后在发起的另外的一个关于session操作的http链接会被阻塞住,这是关键。我不知道这是为什么,很纠结。
你的php程序还在运行, 也就是没有完成html解析 ,js 要php输出完成后才会读取
可是我用firebug查看的,那个post请求已经产生了,js确实被执行了的,只是得不到返回值。
会不会是不是php的在进行session操作的时候存在了lock之类的东西。致使第一次session第一次操作还没完成的时候,第二次请求也在排队等待被执行?
根据你的代码我用firebug查看没有发送请求。 是否清除了测试?
js发送http请求 -> php接收请求,执行结束,返回 -> js获取http返回,执行callback问题在于你的代码php何时执行结束了?整个while(true)死循环.
ps : 不过comet也是这么做的,hold住socket连接,有更新才返回,问题是你的代码根本就没有结束while(true)的条件。
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
http://surmise-sky.com/thinkin-about-php-session-lock-operation/
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)