免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4605 | 回复: 13
打印 上一主题 下一主题

关于ajax 的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-18 10:08 |只看该作者 |倒序浏览
我刚刚接触ajax,练习写了一个小程序:


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>ajax test</title>
  6. <script type="text/javascript">
  7. var req = null;
  8. var console = null;
  9. var READY_STATE_UNINI=0;
  10. var READY_STATE_LOADING=1;
  11. var READY_STATE_LOADED=2;
  12. var READY_STATE_INIT=3;
  13. var READY_STATE_COMPLETE=4;

  14. function sendRequest(url,params,HttpMethod)
  15. {
  16.     if( !HttpMethod ) {
  17.             HttpMethod = "GET";
  18.         }
  19.         req = initXMLHTTPRequest();
  20.         if(req) {
  21.                 var req1=req;       
  22.             req.onreadystatechange=onReadyState;
  23.                 req.open(HttpMethod,url,true);
  24.                 req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  25.                 req.send(params);
  26.         }
  27. }

  28. function initXMLHTTPRequest()
  29. {
  30.     var xRequest = null;
  31.         if(window.XMLHttpRequest) {
  32.             xRequest= new XMLHttpRequest();
  33.         } else if (window.ActiveXObject) {
  34.             xRequest = new ActiveXObject("Microsoft.XMLHTTP");
  35.         }
  36.         return xRequest;
  37. }

  38. function onReadyState()
  39. {
  40.         var ready = req.readyState;
  41.         var data = null;
  42.         if(ready == READY_STATE_COMPLETE) {
  43.             data = req.responseText;
  44.         } else {
  45.             data = "loading.....["+ready+"]";
  46.         }
  47.        
  48.         toConsole(data);
  49. }

  50. function toConsole(data)
  51. {
  52.     if(console != null) {
  53.             var newline = document.createElement("div");
  54.                 console.appendChild(newline);
  55.                 var txt = document.createTextNode(data);
  56.                 newline.appendChild(txt);
  57.         }
  58. }

  59. function onClick()
  60. {
  61.         console=document.getElementById('console');
  62.         sendRequest("data.txt");
  63.         return false;
  64. }
  65. </script>
  66. </head>

  67. <body>

  68. <div id="console"></div>
  69. <form id="form1" name="form1" method="post" action="">
  70.   <input type="button" name="Submit" value="submit" onclick="return onClick();"/>
  71. </form>
  72. </body>
  73. </html>

复制代码


运行后可以显示交互的状态和data.txt的文件内容!
但有个问题就是我修改了data.txt文件中的内容后在点击按钮“submit”显示的内容还是data.txt中的内容,只有重新打开一个ie才能再点击按钮“submit”才能显示当前的data.txt中的内容。
我研究了一下可能是
var req = null;
var console = null;
这两个变量是全局变量的问题,我尝试把他们变成局部变量但是失败了!请高手给指点一下我该如何修改!最终实现当我点击“submit”按钮时显示的是当前的data.txt的内容

[ 本帖最后由 zjbluefox 于 2006-8-18 10:11 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-08-18 12:09 |只看该作者
推荐使用  prototype.js

论坛徽章:
0
3 [报告]
发表于 2006-08-18 13:09 |只看该作者
推荐使用ajax框架,dwr个人使用觉得很好,不需要自己从底层编写,也不用考虑太多平台差异,很不错。

论坛徽章:
0
4 [报告]
发表于 2006-08-18 13:40 |只看该作者
因为刚接触ajax还是想从基本的知识开始,等有一定基础后在研究ajax的框架!所以还是请给我帮我看看如何修改我的程序

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
5 [报告]
发表于 2006-08-19 10:07 |只看该作者
原帖由 zjbluefox 于 2006-8-18 13:40 发表
因为刚接触ajax还是想从基本的知识开始,等有一定基础后在研究ajax的框架!所以还是请给我帮我看看如何修改我的程序



最简单的测试,一步一步alert,看看什么时候没有结果返回,.

论坛徽章:
0
6 [报告]
发表于 2006-08-22 09:10 |只看该作者
原因找到了!我将客户端机器(windows)上的ie的临时文件删除后,点击按钮就可以显示出最新的data.txt文件的内容!不过每次data.txt发生改变后都给到客户端的控制面板中将ie的临时文件删除,非常不方便!
另外这种情况在Mozilla 下就没有问题!
那么在windows的ie中如何修改一下还请各位指点!

[ 本帖最后由 zjbluefox 于 2006-8-22 09:23 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
7 [报告]
发表于 2006-08-22 13:34 |只看该作者
请求地址设置为:
data.txt?随机数

随机数有很多方法生成,例如通过时间字符串。

论坛徽章:
0
8 [报告]
发表于 2006-08-22 15:20 |只看该作者
生成随机数,可以暂时解决这个问题,但同时存在隐患!当出现已经出现过的随机数时就会出现当时data.txt中的值
例如:
data.txt?1   -----> "1234567890"
data.txt?2   ------> "0987654321"
但随机数再次为1时就会显示:“1234567890”
这个问题在Mozilla仍没有问题!

[ 本帖最后由 zjbluefox 于 2006-8-22 15:21 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
9 [报告]
发表于 2006-08-23 08:44 |只看该作者
原帖由 zjbluefox 于 2006-8-22 15:20 发表
生成随机数,可以暂时解决这个问题,但同时存在隐患!当出现已经出现过的随机数时就会出现当时data.txt中的值
例如:
data.txt?1   -----> "1234567890"
data.txt?2   ------> "09876543 ...


你取1~9的随机数,那时肯定出现问题的阿。

简单来说,你把当前时间设置为请求随机数,那基本是不会重复的阿。

随机数不要设置的太短了,那样子肯定重复的几率很大的。

设置位数看看如何阿。

论坛徽章:
0
10 [报告]
发表于 2006-08-25 12:58 |只看该作者
var url="data.txt?d="+new Date().getTime();
sendRequest(url);

这么修改后就可以及时更新了,不过还是不太清楚ie中程序读取了ie的临时文件,而没有去服务器端获取数据!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP