【问题标题】:Getting the executed output of an aspx page after a short delay短暂延迟后获取 aspx 页面的执行输出
【发布时间】:2019-03-20 05:09:17
【问题描述】:

我有一个 aspx 页面,其中包含一些类似的 javascript 代码

<script>
    setTimeout("document.write('" + place.address + "');",1);
</script>

从代码中可以清楚地看出,它会在 1 毫秒的非常短的延迟后在页面上写一些东西。我创建了另一个页面来获取由某个查询字符串执行的页面并获取其输出。问题是

  1. 我无法避免延迟,因为只需编写 document.write(place.address);不会打印任何内容,因为获取值需要一点时间,所以如果我在 setTimeout 中设置它以延迟输出 1 毫秒,它总是会返回一个值
  2. 如果我使用

    从另一个页面请求输出
    System.Net.WebClient wc = new System.Net.WebClient();
    System.IO.StreamReader sr = new System.IO.StreamReader(wc.OpenRead("http://localhost:4859/Default.aspx?lat=" + lat + "&lng=" + lng));
    string strData = sr.ReadToEnd();
    

    我得到的是文档的源代码,而不是想要的输出。

    我想避免这种延迟,或者延迟客户端请求输出,以便获得所需的值而不是源代码。

default.aspx上的JS是

<script type="text/javascript">


    var geocoder;
    var address;

    function initialize() {

      geocoder = new GClientGeocoder();
      var qs=new Querystring();
      if(qs.get("lat") && qs.get("lng"))
      {

        geocoder.getLocations(new GLatLng(qs.get("lat"),qs.get("lng")),showAddress);
      }
      else
      {

      document.write("Invalid Access Or Not valid lat long is provided.");
      }
    }

    function getAddress(overlay, latlng) {
      if (latlng != null) {
        address = latlng;
        geocoder.getLocations(latlng, showAddress);
      }
    }

    function showAddress(r) {

        place = r.Placemark[0];

setTimeout("document.write('" + place.address + "');",1);
//document.write(place.address);

      }



    </script>

requestClient.aspx 上的代码如下

System.Net.WebClient wc = new System.Net.WebClient();
                    System.IO.StreamReader sr = new System.IO.StreamReader(wc.OpenRead("http://localhost:4859/Default.aspx?lat=" + lat + "&lng=" + lng));

                    string strData = sr.ReadToEnd();

【问题讨论】:

  • “我得到的是文档的源代码而不是所需的输出”是什么意思?你看到setTimeout("document.write... 的东西了吗?还是 ASPX 代码(Default.aspx 的标记)?我无法理解后者,并猜测您不是直接从文件系统中获取 URL 而是文件(绕过 IIS)。

标签: c# asp.net javascript html


【解决方案1】:

我不是 JavaScript 专家,但我认为在页面加载完成后使用 document.write 是一件坏事。一旦计算完成,您应该创建一个您的 JavaScript 可以操作的 html 元素。

阐述

在您的页面标记中,为您希望地址出现的位置创建一个占位符:

<p id="address">Placeholder For Address</p>

在您的 JavaScript 函数中,更新该占位符:

function showAddress(r) {
    place = r.Placemark[0];
    setTimeout("document.getElementById('address').innerHTML = '" + place.address + "';",1);
}

【讨论】:

  • 嗨,你能不能再详细一点
【解决方案2】:
string strData = sr.ReadToEnd();

我得到的是文档的源代码,而不是想要的输出

(您能否提供一个输出示例。我认为我没有见过网络抓取工具以这种方式工作,所以这将有助于我确定。但如果不是,这是一个很好的例子web scraper)

你究竟在用字符串“strData”做什么 如果你只是把它写出来,我建议你把它放在一个服务器端控件中(就像一个文字)。如果可能的话,我建议您使用 .net 执行此服务器端,而不是在 javascript 中等待 1 毫秒(考虑到 1 毫秒可能是也可能不是等待的理想时间量,这并不理想)特定用户的机器因此:“客户端”)。在这种情况下,我必须在客户端执行此操作,我将使用 element.onload 事件来确定页面是否已完成加载。

【讨论】:

  • 请让我知道我的回答是否有帮助,请将其设为所选答案,如果没有,请发表评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
相关资源
最近更新 更多