AJAX怎么读取服务器文件.?

litaoso 2011-02-22 12:15:44
最近在做一个读取文件的项目...
一开始是用的JS来读取的...下边贴代码

        // 装配图路径

var filetype = document.getElementById("sfilepaty").value;//得到的路径会是D://111.txt

var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.OpenTextFile(filetype,1,true);
var arr = new Array();
var hang =0;
var line ;


//alert(f1.Readline());
// 逐行读取文件信息
while (!f1.AtEndOfStream)
{
arr[hang]=f1.Readline();
hang++;
}



在本地测试的没问题的..但是到了客户这...部署到服务器上时出错..后来检查才发现..是思路错了
JS读取的是本机上的D://111.txt 并不是服务器上的D://111.TXT

后来找了好多资料...都说JS不提供读取服务器上的文件...
所以..在这里请教各位大虾... AJAX又没办法...读取服务器上D://111.txt这个文件...
权限这块没问题..因为.已经设为信任站点了...


在线等...希望 有人能给予建议....
...全文
528 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
aj3423 2011-03-01
  • 打赏
  • 举报
回复
js可以发请求给服务器,但不能访问客户端文件,原因是,如果可以的话,随便打开一个网页,就把你windows系统里的一些敏感文件发送到服务器了
snowhite88 2011-03-01
  • 打赏
  • 举报
回复
ajax请求URL后,就是读取的服务器文件啊
  • 打赏
  • 举报
回复
上面说的那个例子,后面说“一旦客户端JS无法运行,前者仍然可以提交,正常使用,而后者就会无法工作了。”这个例子举得也并不太准确和有力度。

对客户端JS责任分配的控制,是肯定的,用不着多举例,只要想想你这个在不同用户的各种浏览器防护插件下(无论是防广告插件,还是浏览器加速插件),JS随时无法工作是可以想像的。怎么能让你的主要业务在这样不稳定的情况下运行呢?
  • 打赏
  • 举报
回复
正确的设计原则是让JS只负责前台有限的行为,即使由于客户端的情况,导致JS无法运行,也不影响正常的使用。

就算使用和后台交互的AJAX,比如用户注册时即时验证用户是否存在,也只是当发现用户存在时警告并设置一个标记,让提交时检测到这个标记而不允许提交。而不是反过来默认不可以提交,只有当服务器返回不存在才允许提交。这是有差别的。一旦客户端JS无法运行,前者仍然可以提交,正常使用,而后者就会无法工作了。

楼主这个读文件,不清楚你是具体什么用途。但听说“做一个读取文件的项目”,听来就是以它为主而不是以它为辅。甚至单从这个来说,也根本不是网站的主要用途,而是一些软件的特长。即使用WEB做,这种时候也不是简单的AJAX交互,不是即使JS不能工作也不影响主要的流程的,那就应该让后台来处理。

JS的使用要有度。要知道哪些该做哪些不该做。否则就容易拿枪托拍蚊子,拿筷子当门栓了。
  • 打赏
  • 举报
回复
思路都混了,应该是动态页负责读取服务器上的文件内容返回,ajax请求这个动态页
litaoso 2011-02-22
  • 打赏
  • 举报
回复
...楼上的,仔细点可以么.谢谢了..
...是在前台就你把文本读取出来呢,
...还是.我在后台写一个方法读取出来.然后..在前台用AJAX调用他返回的那个集合?
...然后进行遍历.?
kkjjww 2011-02-22
  • 打赏
  • 举报
回复
AJAX可以啊,怎么说没办法
KK3K2005 2011-02-22
  • 打赏
  • 举报
回复
只有让服务器通过某种协议主动给数据 比较合适
qiunet 2011-02-22
  • 打赏
  • 举报
回复

1. //文件下栽
2. function DownURL(RemoteURL,LocalURL)
3. {
4. try
5. {
6. var xmlHTTP=new ActiveXObject("Microsoft.XMLHTTP");
7. xmlHTTP.open("Get",RemoteURL,false);
8. xmlHTTP.send();
9. var adodbStream=new ActiveXObject("ADODB.Stream");
10. adodbStream.Type=1;//1=adTypeBinary
11. adodbStream.Open();
12. adodbStream.write(xmlHTTP.responseBody);
13. adodbStream.SaveToFile(LocalURL,2);
14. adodbStream.Close();
15. adodbStream=null;
16. xmlHTTP=null;
17.
18. }
19. catch(e)
20. {
21. alert("下载文件时出错!URL="+RemoteURL);
22. }
23.
24. }

你可以尝试下载,然后读取Stream
但是我没有试验过啊
  • 打赏
  • 举报
回复
WIN32这个词现在不适用了,去掉它不看吧。
  • 打赏
  • 举报
回复
最近在做一个读取文件的项目...一开始是用的JS来读取的...

你这个选择就是错的。JS不适合来做这样的应用,并非不能,比如你已经实现了,但它在各种运行环境下(不同的浏览器,不同的客户端浏览器安全设置)就很难表现一致。

每种技术有每种技术的侧重点。要利用合适的技术才对。或者是利用后台程序,或者是利用WIN32桌面程序。
litaoso 2011-02-22
  • 打赏
  • 举报
回复
...哥哥们,你们说的这些逻辑..其实我也懂,
...我只是不知道AJAX的语法而已...我也找了好多,只是还看不太明白.
...不过.谢谢你们了.

等下散分....我再去找找
yhtapmys 2011-02-22
  • 打赏
  • 举报
回复
先后台读取
后推到前台
flyerwing 2011-02-22
  • 打赏
  • 举报
回复
动态的语言在服务里提供此功能吧,JS只是表面调用下吧.

52,792

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧