Here's what you need to try out this dynamic
script tag request:
- Access to a web service that returns JSON and lets you specify a callback function
To create my class, I distilled a lot of existing information, and then adapted it to fit no. 2 above. Until recently, finding a web service that returns JSON and lets you specify a callback function was, well, darn near impossible unless you wrote one yourself. Fortunately, Yahoo recently has offered the option on many of their REST-ish web services. Notably, their many search web services, and their geocoding, map image, and traffic web services, now can return JSON wrapped in a callback function.
The KISS Factor
Compared to using the
XMLHttpRequest object and a proxy, this stuff is easy. The
JSONscriptRequest class does the messy work of creating the
script tag dynamically which makes the actual web service request. For a quick example, I'll do some geocoding, turning a zip code -- in this case zip code 94107 -- into a latitude/longitude pair, using Yahoo's Geocoding Web Service.
Running this application makes a request to Yahoo's Geocode web service and yields the following alert box which displays the latitude and longitude of the zip code 94107.
Figure 1. Alert box
The web service request -- the
req variable in the script above -- specifies that the web service should return JSON-encoded data (
output=json) and that the data should be wrapped in a callback function named
callback=getGeo). You can cut and paste that URL into your browser to see the output of the web service. The output looks like this (or click here):
script tag). For comparison, look at the XML version of this call here.
buildScriptTag method of the
JSONscriptRequest object builds a
script tag that looks like this:
To actually execute the web service request, the
script tag has to be added to the page. The
addScriptTag method attaches the
script tag to the HTML page which is already loaded in your browser window. That action causes the
getGeo function to be called and the JSON-encoded data to be passed to the
alert('Latitude = ' + jsonData.ResultSet.Result.Latitude + ' Longitude = ' + jsonData.ResultSet.Result.Longitude);
Pages: 1, 2