我可以在多长时间内使用JavaScript?

时间:2010-02-23 11:20:11

标签: javascript ajax webforms client-side

我需要在客户端做尽可能多的事情。更详细地说,我想使用JavaScript来编写一个接口(它向用户显示信息,并接受和处理来自用户的响应)。我想使用web服务只是从那里获取一个日期文件,然后再发送一个修改过的数据文件。在这方面,我想知道JavaScript中是否可以使用以下内容:

  1. JavaScript可以读取外部网页的内容吗?换句话说,在我的本地机器上运行JavaScript,它读取给定网页的内容。

  2. JavaScript处理值是否可以填写HTML表单?换句话说,我使用HTML和JavaScript来生成HTML表单。用户应填写表格并按“提交”按钮。然后应将数据发送到原始HTML文件(而不是Web服务器)。然后,这些数据应由JavaScript处理。

  3. 最后,JavaScript会生成一个本地数据文件,我想将此文件发送到PHP Web服务器。我可以用JavaScript吗?

  4. 我可以从JavaScript启动本地程序的执行吗?更具体地说,本地程序是用Python编写的。

  5. 我将不胜感激任何评论和答案。

5 个答案:

答案 0 :(得分:9)

  1. 技术上可能,但由于same origin policy而无法实现。这适用于读取和写入外部内容。您可以做的最好的事情是加载一个包含不同域名页面的iframe - 但您无法以编程方式访问它。您可以在IE中解决这个问题,请参阅Andy E的回答。

  2. 对于第一部分是肯定的,mmmm不是第二部分 - 您可以将表单提交到HTML页面并使用Javascript读取GET参数,但它非常有限(建议最大值)大小为1024字节的数据)。你可能应该在一个页面上拥有所有智能。

  3. 您可以在本地生成文件,供用户使用Downloadify下载。如果没有用户交互,将无法生成文件并将其上传到服务器。但是,应该可以生成数据并将其作为POST数据发送到服务器。

  4. 这非常非常困难。由于安全限制,在大多数浏览器中,如果不安装扩展程序或类似程序,则通常是不可能的。您最好的选择可能是Internet Explorer的专有脚本语言(WScript,VBScript)以及“安全区域”模型,但我怀疑现在是否可以执行本地文件。

答案 1 :(得分:2)

将Internet Explorer与本地文件一起使用,您可以执行以下某些操作:

  1. 确实页面受到相同原始政策的限制(参见Pekka的链接)。但是这可以使用WinHttpRequest COM接口在IE中解决。

  2. 正如Pekka所说,你可以管理的最好的是GET请求(使用window.location.search)。 POST请求变量完全无法获得。

  3. 您可以使用FileSystemObject的COM界面来阅读&写本地文本文件。

  4. 您可以使用WScript.Shell界面的Exec方法执行本地计划。

  5. 如果您愿意使用Internet Explorer,那么您提出的所有问题都是可以实现的。 COM接口将需要显式权限才能运行(出现黄色警报栏)。您还可以查看创建Windows Desktop Gadget(Vista或Win 7)或HTML Application (HTA)以实现目标。

    如果做不到这一点,请使用XAMPP将您的计算机变成真正的服务器,并用PHP编写您的页面。

答案 2 :(得分:2)

看到我有你想做的事 最好的事情是遵循

  1. 选择一个javascript库(例如:jquery,dojo,yui等),我使用jquery.this会减少你的一些负载
  2. 尽管将表单数据保存在本地文件中,将它们存储在本地变量中处理它们并使用XMLHttp请求将它们发送到服务器(用于进一步处理,如添加/更新数据库等),并且当webservice返回数据时,数据和更新dom。
  3. 我正在向您展示样本

    - 这是dom

    Name:<input type='text' id='name' />
    
    <a href='javascript:void(0)' onClick='submit()'>Submit Form</a>
    <br>
    <div id='target'></div>
    
    --this is js
    function submit()
    {
    var _name=$('#name').val();// collect text box's data
    //now validate it or do any thing you want
    
    callWebservice(_name,_suc,_err);
    //above call service fn has to be created by you where you send this data
    //this function automatically do xmlHttprequest etc for you
    //you have to create it ur self 
    }
    
    //call this fn when data is sucessfully returned from server
    function _suc(data)
    {
    //webservice has returned data sucessefully 
    //data= data from server, may be in this case= "Hello user Name"; (name = filled in input box);
    //update this data in target div(manipulate dom with new data);
    $('#target').html(data);
    }
    function _err()
    {
    //call this fn when error occurs on server
    }
    

    //实际上大部分工作都是使用json完成的。我已经向你展示了如何使用js来操纵dom并调用servcies并做其他事情的基本思路。这样我们就可以避免页面重新加载,并且查看器可以看到新数据

答案 3 :(得分:1)

我会回答说你可以做很多事,但是在对OP的评论中,你说

“我想编写一个团体游戏。”

所以,我的回答只是在客户端做了你能够并愿意在服务器端仔细检查的内容。 Never Trust the Client

我不想两次完成我的工作。

如果你打算在客户端做事,你必须做两次,否则就会受到猖獗的欺骗。

答案 4 :(得分:0)

当我们开始我们的项目时,我们遇到了同样的问题。
最后,我们把所有可能的事情都转移到JS方面。这是我们的堆栈:

后端专门接收和发送JSON数据。
我们使用Erlang,但Python会是相同的。它处理身份验证/安全性和存储。

前端,在HTML + CSS中用于可视元素,JS用于逻辑。
JS模板引擎将JSON转换为HTML。我们已经构建了PURE,但还有很多其他的可用。 MVC在浏览器方面可能有些过分,但IMO使用模板引擎是你可以做的最少的分离。

响应时间惊人。一旦页面和JS / CSS被加载(新的或从缓存中),只有数据通过网络传递每个请求。