开发者

Getting the executed output of an aspx page after a short delay

开发者 https://www.devze.com 2022-12-08 21:46 出处:网络
I have an aspx page which has some javascript code like <script> setTimeout(\"document.write(\'\" + place.address + \"\');\",1);

I have an aspx page which has some javascript code like

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

As it is clear from the code it will going to write something on the page after a very short delay of 1 ms. I have created an another page to get the page executed by some query string and get its output. The problem is

  1. I can not avoid the delay as simply writing document.write(place.address); will开发者_开发知识库 not print anything as it takes a little time to get values so if I set it in setTimeout for delayed output of 1 ms it always return me a value
  2. If I request the output from another page using

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

    I get the source code of the document instead of the desired output.

    I would like to either avoid that delay or else delayed the client request output so that I get a desired value not the source code.

The JS on default.aspx is

<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>

and the code on requestClient.aspx is as

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


I'm not a JavaScript expert, but I believe using document.write after the page has finished loading is a bad thing. You should be creating an html element that your JavaScript can manipulate, once the calculation is complete.

Elaboration

In your page markup, create a placeholder for where you want the address to appear:

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

In your JavaScript function, update that placeholder:

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


string strData = sr.ReadToEnd();

I get the source code of the document instead of the desired output

(Could you give a sample of the output. I don't think I've seen a web scraper work that way so that would help me to be sure. But if not this is a good example web scraper)

Exactly what are you doing with the string "strData" If you are just writing it out, I recommend you putting it in a Server side control (like a literal). If at all possible, I'd recommend you do this server side using .net rather than waiting 1 ms in javascript (which isn't ideal considering the possibility that 1 ms may or may not be an ideal amount of time to wait on a particular user's machine hence: "client side"). In a case like this and I had to do it client side I would use the element.onload event to determine if a page has finished loading.

0

精彩评论

暂无评论...
验证码 换一张
取 消