社区
基础编程
帖子详情
请教大虾:PHP能否和Javascript进行数据交换?
一年级小学生
2000-08-03 12:18:00
请教大虾:
PHP能否和Javascript进行数据交换?我现在用PHP进行网页设计,可是发现PHP对数据库操作的能力很强,但是对页面控制的能力有限。不知道javascript是否能够和PHP进行数据交换?谢谢!
...全文
329
1
打赏
收藏
请教大虾:PHP能否和Javascript进行数据交换?
请教大虾: PHP能否和Javascript进行数据交换?我现在用PHP进行网页设计,可是发现PHP对数据库操作的能力很强,但是对页面控制的能力有限。不知道javascript是否能够和PHP进行数据交换?谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ycshowtop
2000-08-05
打赏
举报
回复
给你一篇文章看一下,有参考的。
PHP & JavaScript控制系列:客户端数据存储
所有程序员都喜欢做的一件事就是编写一个可以生成程序的程序。在web 上
,我们面临两种不同的开发环境:客户端(浏览器)和服务端。根据HTTP协议的
定义,就可以在服务端编写一个程序,这个程序输出一个使用了另一种可以在客
户端执行的语言的程序。让我们选择PHP(当然的了)编写服务端程序,选择Jav
aScript来编写客户端程序。在这篇文章中,要向你演示如何通过这种组合在客户
端存储数据并且使得服务器与浏览器之间的数据交换达到最少,以用在一些交互
的应用中,如聊天室、新闻系统或你想得到的什么东西。
要素:
PHP4
JavaScript
Frames
想法:
我们将暂时试着开发一个用PHP 编写的HTTP聊天室程序。对于聊天来说,HT
TP不是一个很好的协议,但是它对防火墙和代理服务器有免疫力,我们可以允分
发挥PHP的潜力,并且不需要Java Applet。对于聊天室程序有两个主要的问题:
第一个就是,IE不支持“推”的方法,这样就需要把它做成一个全“拉”的应用
程序(指客户端自动刷新),这一点对于一个聊天程序不是很自然。我们打算让
客户端的刷新时间是可调的,服务器将根据前x 分钟内一个位于服务器的用于接
收消息数据的函数结果生成刷新时间。第二个问题要难解决一些:因为采用自动
刷新的方法,这样每一次服务器都需要将所有的信息发给客户端,我们估计会造
成大量的传输。并且我们所做的一个模拟简单的聊天室模型的样板程序也显示这
就是造成聊天延时的主要原因。本文处理了第二个问题和更深的问题。
普通模型:
通过使用帧,可以刷新一个特定的帧而不需要重新装入其它帧,这个对于最
少化c/s 传输很有用。我们的模型基于下面的设计:
主文件,用来定义帧结构。装入帧文件。显示帧文件。
在我们的设计中,装入帧每“x” 秒自动刷新,想法是将数据保存在主文件
中,允许装入帧文件向服务器请求客户端还未收到的数据。我们使用时间戳来标
记消息,新闻或可传输的东西,并且通过它可以知道哪一个需要传给客户端,哪
一个不需要。我们使用PHP4的session 功能将“最后的时间戳”保存在客户端以
便在服务器它也是可见的。当装入帧文件接收到数据时,数据被保存在主文件里
(注意,主文件可能很大,但是它只传输一次),然后让显示帧文件刷新。为了
进一步优化,我们让显示帧文件尽可能的短,在这帧里,只是调用一个“displa
y”的JavaScript 函数,这个函数明显被保存在主文件中,这个函数使用保存在
主文件中的数据来动态绘制显示帧。让我们看一下这个方法:
浏览器请求主文件(帧结构)
主文件从服务器被传输过来,它定义了帧结构,然后其它的帧(装入帧和显示帧
)被传输。
装入帧文件在服务器被分析,如果客户端没有“timestamp”session 变量,它就
将所有的数据从服务器上取回,并且生成JavaScript代码将数据存在主文件中。
然后设置“timestamp”session变量。然后装入帧文件生成JavaScript代码使客
户端刷新显示帧文件。
这个刷新引起显示帧文件调用“display”函数,这个函数根据数据生成显示帧。
每“x”秒我们回到(2)
我们对这个方法的分析如下:
我们要三个文件:
主文件 : (很大,包含显示代码和保存的变量和初始值)
装入帧文件 : (小,包含php代码,用于从服务器取回数据和生成JavaScript代码
)
显示帧文件 : (非常小,只有一个对主文件中的显示函数的调用)
主文件只被传输一次。
装入帧文件和显示帧文件每“x”秒被传输一次。
装入帧文件可能在第一次被调时大一些,然后因为每次只取回客户端未取过的数
据,它就变得很短了。
显示帧文件也是一样。
由于显示结果是在客户端被处理的,我们就减少了服务器数据的装入。
糊涂了吗?还是让我们看一看例子吧:
在这个例子里,我们建了一个聊天室,它还不能真正使用,只是用来演示如
何实现我们的模型,请不要提出“为什么不在聊天室里加上这个或加上那个功能
”之类的要求。如果发现这个模型有用,你可以利用它建立一个满足你的要求的
足够复杂的聊天室来,同时请记住,它不只是能够用来建聊天室。
行动!
请使用mysql创建一个测试数据库(mysqladmin create testbase),然后创
建一个表:
---------------------------------------------------------------------
create table testeable (
timestamp datetime,
message text
);
---------------------------------------------------------------------
这是主文件:
---------------------------------------------------------------------
<script>
lines=new Array();
function displaymsgs() {
for(i=0;i<lines.length;i++) {
display.document.write(lines[i]);
display.document.write('<BR>');
}
}
</script>
<frameset cols="1" rows="20,60,20" border="0">
<frame name="loader" src="loader.php">
<frame name="display" src="display.php">
<frame name="form" src="form.php">
</frameset>
---------------------------------------------------------------------
注意,我们有了装入帧,显示帧和一个名叫“form”的新的帧,这是我们用
来向聊天室发送数据的表单。注意一下简单的“display”函数,在这里你可以根
据你的想法使用颜色、动态颜色、用户信息,html表格,图像,等等。
显示帧文件为:
---------------------------------------------------------------------
<script>
top.displaymsgs();
</script>
---------------------------------------------------------------------
我们保证过的,它会很短的 :-)
接下来就是装入帧文件:
---------------------------------------------------------------------
<?php
session_start();
// 在这儿我们使用了session
if(!isset($timestamp)) {
//如果没有timestamp(时间戳)我们把它定义为0
$timestamp=0;
}
$dab=mysql_connect("localhost", "user", "password");
// 在这里使用你自已的值mysql_select_db( "testbase",$dab);
// 查询信息不会被客户端看见$query= "select * from testeable where time
stamp>'$timestamp'";
$result=mysql_query($query,$dab);
$msgs=array();
// 在循环中,我们将对话信息存在一个数组中,并且得到最大的时间戳
while($res=mysql_fetch_array($result)) {
$msgs[]=$res[ "message"];
if($res["timestamp"]>$timestamp) {
$timestamp=$res["timestamp"]; }
}
session_register( "timestamp");
// 注册时间戳
echo '<script>';
// 在这个循环中,我们生成JavaScript代码用来向主文件(注意使用"top"来
指// 向代表主文件的父帧)中的数组增加对话信息
for($i=0;$i<$count($msgs);$i++) {
?>
top.lines[top.lines.length]="<?php print("$msgs[$i]"); ?>";
<?php
}
// 现在我们将生成JS代码来使显示帧重新装入
?>
top.display.location.reload();
</script>
<!-- 注意JS的setInterval方法用来让帧每4秒钟重装一次 -->
<body onLoad="window.setInterval('location.reload()',4000);">
</body>
---------------------------------------------------------------------
Ok, 然后是用于测试目的“form”帧:
---------------------------------------------------------------------
<?php
session_start();
if (!isset($timestamp)) {
$timestamp=0;
}
// 显示表单,使用JavaScript来得到最后的时间戳
if (isset($msg)) {
$dab=mysql_connect("localhost", "root", "seldon");
mysql_select_db("testbase",$dab);
$query= "insert into testeable(timestamp,message) values(now(),'$m
sg')";
mysql_query($query,$dab);
// 现在得到在last_time之后的所有聊天对话
$query= "select * from testeable where timestamp>'$tt'";
$result=mysql_query($query,$dab);
$msgs=array();$i=0;$timestamp=0;
while($res=mysql_fetch_array($result)) {
$msgs[]=$res["message"];
if($res["timestamp"]>$timestamp) {
$tt=$res["timestamp"];
}
}
session_register("timestamp");
// 现在我有了最大的时间戳,使用JavaScript,我们可以设置这些值
?>
<script>
<?php
for($i=0;$i<$count($msgs);$i++) {
?>
top.lines[top.lines.length]="<?print("$msgs[$i]");?>";
<?php
}
?>
top.display.location.reload();
</script>
<?php
}
?>
<form name="foo" action=" <?php print("$PHP_SELF"); ?>" method="post">
Message:<input type="text" name="msg"> <input type="submit" name="ne
wmsg" value="send">
</form>
---------------------------------------------------------------------
注意,我们根据"form"帧来刷新显示,这对用户很好,因为一旦他提交了
他的信息就会被马上看见。用户喜欢这样,因为它在聊天室中增加了一些动态机
制。你也看到了,form帧与装入帧非常象。
我们向你展示了一个极为有用的技术,它通过将数据保存在客户端从而减少
了c/s间的传输量,并且在客户执行一个复杂的显示操作时减少了从服务器的信息
装入。现在你有了能力,去征服世界吧!
C# 串口通信(彻底解决C#串口通信中的数据丢失问题)
以网上某位
大虾
的源码为版本,沿用了其可用的代码部分。对其余欠妥部分
进行
了改造。不要资源分,是大家不用为积分而烦恼。出来混都不容易,希望大家相互照应!
免费下载:C语言常见问题与经典算法.rar
C语言常见问题与经典算法.rar 个人感觉挺好的资源,给
大虾
门免费下载
infoQ访谈
大虾
卢:hadoop与海量GIS数据的碰撞
在现代人的日常生活中,缺少不了地图的身影,而地图已经超越了简单的工具属性,它的价值正在逐步被大家挖掘出来,例如:通过Nike+,你可以看到自己每天的运动路径和热量消耗、商家可以通过地图对消费者
进行
定向广告投放等。越来越多的互联网公司或个人开发者尝试通过结合地图去做更多不一样的事情,对于地图数据本身也有很多有意思的事情,InfoQ借此机会采访了Esri的卢萌,听他谈谈在GIS数据是如何运用Hadoo
请教
高手:客户/服务器之间,远程数据更新最佳方案
请教
各位高手:客户/服务器之间,设计远程数据更新最佳方案的问题现有环境:数据库: 服务端ORACLE 客户端 MS SERVER 2000开发工具:delphi 和。net现在服务端与客户端都布置好了,就差数据更新的问题。要求能通过internet,实时或批量更新均可,如有XML实现方案最好。还望各位
大虾
不吝赐教小弟,谢谢啦!
网络安全隔离(光闸、网闸、
数据交换
系统)技术详解
现阶段,公安、法院、检察院、电子政务、金融、医疗等行业内、外网安全隔离与
数据交换
场景
基础编程
21,886
社区成员
140,364
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章