array(2) { ["docs"]=> array(0) { } ["count"]=> int(0) } 111string(0) "" int(1) int(10) int(70) int(8640000) array(2) { ["docs"]=> array(0) { } ["count"]=> int(0) } 使用Ajax建立的Server Push和Iframe建立的Comet - 爱码网

1、Ajax建立的Server Push

只能由后台向前台推送数据,如果前台想发送数据给后台则需要单独再发一个请求。

这里使用的例子就是一个在线CD销售页面,前台发起ajax请求,后台随机取一个数,从现在库中减去获得的随机数,然后返回给前台;

前台如果想改变库存的数据,在文字输入框输入相应的数量,然后提交给后台。

界面大致是这个样子

使用Ajax建立的Server Push和Iframe建立的Comet

图中的“27”就是剩余的CD数量,上文提及的“库存”实际是使用一个txt文本进行保存的。

因为代码是从网上一篇文章(可点击查看详情)中下载过来的,他使用了prototype中的ajax,这里就没有作修改。需要下载源代码的,请点击这里>>

需要说明的,它的主页中form的默认提交行为没有被阻止掉,将会导致页面被刷新。可以使用onsubmit=”return false;”进行阻止,AjaxLongPolling.js的初始化函数中对form的submit再进行监听就可以了。

目录结构大致是这样子:

使用Ajax建立的Server Push和Iframe建立的Comet

页面载入完成后,向后台发送ajax请求,当ajax成功返回后将重复执行上一次操作(直到返回的数量为0,则中止上述循环)

if (parseInt(transport.responseText)) {
connectToServer();
}
}
});
}

想要修改后台的“库存”数量,则需要另外一个ajax

'txtQty').getValue()
}
});
}

虽然是同一个提交地址LongPolling.php,但在LongPolling.php中是针对参数进行了处理的

int)$num);
}
?>

 
2、使用Iframe建立的Comet
 
这里针对IE和其它浏览器做了不同的处理,因为IE中的htmlfile添加的iframe,在浏览器当前窗口的底部将看不到加载进度(看上去比较平静),而其它浏览器则会出现一个loading的状态。
这个示例就两个文件:html页面、php页面,实现的效果就是取当前服务器的时间,然后在前台页面显示。
 
运行的效果大致如下图所示(IE、Chrome):
使用Ajax建立的Server Push和Iframe建立的Comet
使用Ajax建立的Server Push和Iframe建立的Comet
 
HTML页面的代码:
>后台返回数据</div>
</body>
</html>
 
 
PHP页面的代码:
'</script>';

ob_flush();
flush();
sleep(1);
}

?>

 

 

参考链接:

1、Comet Programming:the Hidden IFrame Technique

2、Comet Programming:Using Ajax to Simulate Server Push

3、传说中的comet(iframe版)

4、传说中的comet(ajax版)

5、Browser与Server持续同步的做法介绍(Polling,Comet,Long Polling,WebSocket)

 

关于Node.js的Web Socket,之前写过一篇Demo《基于Node.js的Web Socket

相关文章: