views:

141

answers:

2

Hi all,

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

can anyone help me out for either avoiding that delay or else delayed the client request ouput 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();
+1  A: 

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);
}
Jason Berkan
Hi can you elobarate it little more
Ankur
A: 
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.

Terrance
Please let me know if my answer was helpful by making this the selected answer or comment if it was not.
Terrance