在短暂延迟后获取aspx页面的执行输出

时间:2009-10-21 14:27:53

标签: c# asp.net javascript html

我有一个aspx页面,其中包含一些像

这样的javascript代码
<script>
    setTimeout("document.write('" + place.address + "');",1);
</script>

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

  1. 我无法避免延迟,只需编写document.write(place.address);不会打印任何内容,因为它需要一点时间来获取值,所以如果我在setTimeout中设置它以延迟输出1 ms它总是返回一个值
  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();
    

    我得到了文档的源代码而不是所需的输出。

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

  3. 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();
    

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

string strData = sr.ReadToEnd();

我得到了文档的源代码而不是所需的输出

(你能不能给出一个输出样本。我不认为我看过这样的网络刮刀工作,这样可以帮助我确定。但如果没有,这是一个很好的例子web scraper

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