views:

136

answers:

1

I'm writing an app that uses ajax to retrieve data from a mysql db using php. Because of the nature of the app, the user clicks an href link that has an "onclick" event used to call the javascript/ajax. I'm retrieving the data from mysql, then calling a separate php function which creates a small html table with the necessary data in it. The new table gets passed back to the responseText and is displayed inside a div tag. The tables only have around 10-20 rows of data in them. This functionality is working fine and displays the data in html form exactly as it needs to be on the page.

The problem is this. the HREF "onclick" event needs to run multiple scripts one right after the other. The first script updates the "existing" data and inside the "update_existing" function is a call to refresh a section of the page with the updated HTML from the responseText. Then when that is done a "display_html" function is called which also updates a different section of the page with it's newly created HTML table. The event looks like this:

Update

This string gets built dynamically using php with parameters supplied, but for this example I simply took the parameters out so it didn't get confusing.

The "update_existion() function actually calls the display_html() function which updates a section of the page as needed. I need to update a different section of the page on the same click of the mouse right after the update, which is why I'm calling the display_html() again, right after it. The problem is only the last call is being updated on my screen. In other words, the 2nd function call "display_html()" executes and displays the refreshed data just fine, but the previous call to update_existing() runs and updates the database properly, but doesn't display on the screen unless I press the browsers "refresh" button, which of course displays the new data exactly how I want it to, but I don't want the users to have to press the "refresh" button. I tried adding multiple "display_html() calls one right after the other, separating all of them with the semicolon and learned that only the very last function call actually refreshed the div element on the html page with the table information, although all the previous display_html() calls worked, they couldn't be seen on the page without a refresh of the browser.

Is this a problem with javascript, or the ajax call, or is this a limitation in the DOM that only allows one element to be updated at a time. The ajax call is asynchroneous, but I've tried both, only async works period. This is the same in both Firefox and Internet Explorer

Any ideas what's going on and how to get around it so I can run these multiple scripts?

A: 

I'd recomment you to use jQuery javascript library. It has some funcions, like live() that can "wait" for that table to appear on the browser and apply the remaining functions on it.

Also, it's a great set of functions that will certainly help you out reducing the ammount of code you write, making it more human-readable.

yoda
Thanks yoda. I'm not familiar with jquery, but I'll look into it further. However, i'm still confused as to why the code doesn't display. Javascript is syncroneous in nature, and both calls are mutually exclusive to each other and should "refresh" the div tag without the need to use the browsers refresh button. It doesn't make sense to me?
Ronedog
The problem, imo, is that the upcomming html table wasn't added to the DOM, and therefore the funcions you assign to it will probably not work. That's why jQuery guys created the live() function, o ensure any new markup gets assigned to any function you want.
yoda