Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 了解HTTP请求何时从HTML表单完成_Javascript_Jquery_Asp.net_Html - Fatal编程技术网

Javascript 了解HTTP请求何时从HTML表单完成

Javascript 了解HTTP请求何时从HTML表单完成,javascript,jquery,asp.net,html,Javascript,Jquery,Asp.net,Html,我有一个HTML表单,在使用JavaScript的window.location按下按钮时调用ASP.NET页面。ASP.NET页运行进程并提示用户将进程结果保存到用户计算机上的文本文件中 因为ASP.NET页面的输出是一个文本文件,所以用户实际上从未离开HTML表单——这是我想要的行为。但是,生成文本文件所涉及的过程可能需要一分钟左右。因此,我希望我的HTML表单在页面运行时显示一条“正在加载”消息,并在页面运行完毕后删除该消息 我的HTML表单如何知道它调用的页面的状态?换句话说,我如何知道

我有一个HTML表单,在使用JavaScript的window.location按下按钮时调用ASP.NET页面。ASP.NET页运行进程并提示用户将进程结果保存到用户计算机上的文本文件中

因为ASP.NET页面的输出是一个文本文件,所以用户实际上从未离开HTML表单——这是我想要的行为。但是,生成文本文件所涉及的过程可能需要一分钟左右。因此,我希望我的HTML表单在页面运行时显示一条“正在加载”消息,并在页面运行完毕后删除该消息

我的HTML表单如何知道它调用的页面的状态?换句话说,我如何知道何时从HTML表单中删除“加载”消息


我最终使用了一个带有ASPX WebMethod的回调来解决这个问题。由于ASPX WebMethod无法将文本文件保存到浏览器,因此我将文件写入磁盘,然后返回文件的URL,提示用户保存该文件。

在较高级别上,您需要从JavaScript向服务器上的某种端点发出AJAX调用。听起来您已经完成了一半,但是您需要调用一个知道如何向调用JavaScript返回值的函数,而不是调用页面本身(我猜您是在从JavaScript进行模拟回发)。ASP.NET
WebMethod
是一种方法;您还可以创建一个web服务。
WebMethod
方法将更接近您现在所做的

然后,
WebMethod
将返回包含成功/失败消息的JSON或XML消息

在JavaScript中,流程如下所示:

   if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      } 
    function getText() {
      xmlhttp.open("GET","url to asp page",true);
      xmlhttp.send(null); 
      xmlhttp.onreadystatechange = fileReady;
      //code for loading bar
    }

   function fileReady() {
        xmlDoc=xmlhttp.responseXML;
       //code for printing or use the file
   }
  • 用户点击链接
  • 开始一些繁忙的动画
  • 向服务器上的
    WebMethod
    发送AJAX请求,并在服务器返回结果时调用回调函数
  • WebMethod
    处理表单
  • 服务器向浏览器发回一条带有“成功!”消息的消息
  • 最初的AJAX函数调用回调函数,回调函数将停止繁忙的动画并向用户显示一条成功消息
如果您提供更多关于您正在使用的技术的详细信息,我可以更具体一些。

使用XMLHttpRequest

创建XMLHttpRequest对象的语法:

xmlhttp=new XMLHttpRequest();
旧版本的Internet Explorer(IE5和IE6)使用ActiveX对象:

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
然后你可以这样使用它:

   if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      } 
    function getText() {
      xmlhttp.open("GET","url to asp page",true);
      xmlhttp.send(null); 
      xmlhttp.onreadystatechange = fileReady;
      //code for loading bar
    }

   function fileReady() {
        xmlDoc=xmlhttp.responseXML;
       //code for printing or use the file
   }

关于详细信息,google:)

我可以看到,如果我能让我的WebMethod实际提示用户保存文本文件,这将起作用。我调用WebMethod,它在处理过程中没有任何错误,但它从不提示用户保存文件。一个普通的旧ASP.NET页面确实会提示保存文件,但我无法从中得到一个回调来指示何时完成。