Wow I'm chatty aren't I... I just wanted to add I changed my code to this
$(function() { $.ajax({ type: "GET", url: "xml/location.xml", dataType: "xml", success: function(xml) { towncity = []; $(xml).find("[EMAIL PROTECTED]'"+ currprov +"'] > TOWN_CITY_NAME").map(function(){ towncity.push( $(this).text() ); }); $("#city").autocomplete(towncity); } and that improved speed greatly. It appeared I was binding the autocomplete script and data source to the #city field with every iteration of my XML file query and this of course was causing a huge speed bump. Once I moved the autocomplete binding statement outside of my XML file query function the wheels turned much faster. Mat :) On Dec 6, 12:26 pm, Mat <[EMAIL PROTECTED]> wrote: > One thing I do notice with my code is that it is slow. If I change > provinces and type in the city field and change provinces again things > slow right down. I know this must be due to the way I have coded this. > I am wondering if you have any suggestion to improve the speed of > things? The form will primarily used by those in Alberta so I though > if I loaded the array with Alberta city names by default when the > script loads it might speed things up. DO you think the JSON approach > you mentioned would be quicker? > > Thanks, > Mat > > On Dec 6, 12:15 pm, Mat <[EMAIL PROTECTED]> wrote: > > > Hi Micheal, > > > Thank you so much for that. I knew I was getting close to a solution > > but I was well and truly stuck. It is now working and I am delighted. > > > This is the code that worked for me > > > success: function(xml) { > > towncity = []; > > $(xml).find("[EMAIL PROTECTED]'"+ currprov +"'] > > > TOWN_CITY_NAME").map > > (function(){ > > towncity.push( $(this).text() ); > > $("#city").autocomplete(towncity); > > }); > > > } > > > The XML file I am querying is a file I constructed myself (so I have > > full access to it) for a few different reasons. I am not good enough > > at mySQL to create a database with the information, I am too cheap to > > pay for a ready made database ;), the autocomplete script gives an > > option of storing the data in a local.js file but I did not like this > > idea as it may not transfer to future projects and I don't really know > > much about JSON. > > > Once again thank you so much, I expected to have to spend hours trying > > to get this to work today! > > > Mat > > > On Dec 5, 11:55 am, "Michael Geary" <[EMAIL PROTECTED]> wrote: > > > > Hi Mat, > > > > 1) You're defining towncity like this: > > > > var towncity = window.towncity = new Array(); > > > > That creates both a local variable named towncity and a window property > > > (global variable) of the same name. Is that what you want? Do you need to > > > use towncity outside this code? If not, I would change it to: > > > > var towncity = []; > > > > 2) In the .each() inside your ajax callback you have this code: > > > > towncity = $(this).text(); > > > > That *replaces* the towncity variable with the text of the single XML > > > element for the current iteration of .each() - so it's no longer an array > > > but is now a simple text string. It doesn't sound like that's what you > > > want, > > > is it? > > > > To append the item text to the towncity array, you could change it to: > > > > towncity.push( $(this).text() ); > > > > But you probably also want to clear this array before running the loop (is > > > that right?), so just before the $(xml).find(...) you should add: > > > > towncity = []; // note: no "var" here > > > > which gives you this code: > > > > success: function(xml) { > > > towncity = []; > > > $(xml).find(...).map(function(){ > > > towncity.push( $(this).text() ); > > > }); > > > } > > > > Given that, you could simplify the code to: > > > > success: function(xml) { > > > towncity = $(xml).find(...).map(function(){ > > > return $(this).text(); > > > }); > > > } > > > > BTW, do you have control over the XML file that the server generates? If > > > you > > > do, you could use JSON instead of XML to make the code simpler. If you're > > > stuck with XML, this code should do the trick. > > > > -Mike > > > > > From: Mat > > > > > Hi there, > > > > > I'm sorry this is a pretty newbie question.... > > > > > I am using JQuery with an xml file and autocomplete. What I am trying > > > > to achieve is to use an xml file as my data source to autocomplete > > > > cities in a form once a user selects their province. When a user > > > > selects a particular province then only the cities in that province > > > > will be listed by the autocomplete script as the user starts to type > > > > in the 'city' form field. > > > > > My problem here is that I am trying to use the array 'towncity' as my > > > > data source for autocomplete and change the contents of the array when > > > > the province select box #province is changed. However, I can not get > > > > my $('#province').change(function().... to affect the array 'towncity' > > > > that I have declared outside of the function.... > > > > > <script type="text/javascript"> > > > > $(document).ready(function() { > > > > var towncity = window.towncity = new Array(); > > > > $("#city").autocomplete(towncity); > > > > $.preloadCssImages(); > > > > $('div.jshide').show(); > > > > $("#tenantForm").validate({ > > > > rules: { > > > > name: { > > > > required: true, > > > > minlength: 2 > > > > }, > > > > province:"required", > > > > ccom:"required", > > > > occupied: "required", > > > > rented:"required", > > > > condo:"required", > > > > payment:"required" > > > > > } > > > > }); > > > > > $("#renewdate").datepicker({ > > > > dateFormat: "d M, yy", > > > > showOn: "both", > > > > buttonImage: "images/calendar.gif", > > > > buttonImageOnly: true > > > > }); > > > > > $('#province').change(function() { > > > > var currprov = $('option:selected', > > > > this).text(); > > > > > $(function() { > > > > $.ajax({ > > > > type: "GET", > > > > url: "xml/location.xml", > > > > dataType: "xml", > > > > success: function(xml) { > > > > > $(xml).find("[EMAIL PROTECTED]'"+ currprov +"'] > > > > > TOWN_CITY_NAME").each(function(){ > > > > > towncity = $(this).text(); > > > > }); > > > > } > > > > }); > > > > }); > > > > }); > > > > }); > > > > </script> > > > > > Anyone have any ideas? > > > > > Thanks, > > > > Mat