Hans Zaunere wrote:
Ajax solves this problem neatly by letting you move all state [1] into
the browser.  This makes sense from an architectural viewpoint because
we are putting this context information close to where it is needed,
the UI.

I'm not sure what you mean, though, by keeping state in the browser.  Here's
essentially what's work for me in the past:P


I read the above as, to take a simple example:

A user searches for all employee records in NYC. He browses to page 3 of that result set
Than he clicks on a record to edit it.
When he completes editing the record and clicks "save", he wants to be returned to page 3 of the result set, with a message across the top of the screen saying "Record XYZ updated successfully".

With sessions, you could store the search and page number he was on in the session, so when he clicks save he returns to the page he came from.

Problem:
A user searches for all employee records in NYC. He browses to page 3 of that result set
Than he clicks on a record to edit it.
He doesn't recall the exact phrase used that he wants to change some piece of data to to adopt a standard.
He opens a second tab/browser and searches for all employees in Baltimore.
He browses through to the fourth page and finds a record he used that on and opens it He then switches back to the window where he is editing the record and copies the phrase from one window to the other.
He completes processing and clicks save.
He is returned to page 4 of the Baltimore search(his last viewed search page) and not the NY search


Ajax tracking state:
A user searches for all employee records in NYC
The search result is loaded in a hidden div which is then made visible via AJAX
He browses to page 3 of the search results
Then he clicks on a record to edit it
Using Ajax, the listing is now hidden and the record is loaded in a hidden div and then made visible
He doesn't recall the exact phrase...
....
(user now has 2 windows open, 1 with the NYC employee being edited, 1 with the Baltimore employee being edited - yes this is stupid, he should be viewing not editing the Baltimore data, but such is the way of life)
He makes the change to the NYC employee and clicks save
using AJAX, the data is saved, the employee edit div data is set to "employee XYZ successfully update", while the employe list div is made visible.

So in this manner, using Ajax his path/state is saved in the browser window and he returns to precisely where he was.


The above being a stupid example that could have been easily tracked in other ways(a single line of data in each row specifying the search criteria, the page, and perhaps the result set data identifier). But when you have 30 or 40 pieces of data to track and return to the user, it starts getting more complicated.

Of course, all this could have been done with sessions and setting an identifier for each browser window. So I would not say this is something "extra" you get with Ajax. What it rather does is make less work for the coder. Using cookies, sessions, or passing variables through the forms you would have had to actively code for all that state information. By keeping it all stored in the browser and not reloading the data, you don't have to track it at all.


OTOH it does have it's own price and problems. All these nifty little ajax scripts maintaining data on a browser start to eat up memory. Browsers that weren't designed on the assumption of maintaining and adding more and more variables, instead they assumed each page navigation would discard all the old variables and create a new set will start leaking memory. And after sitting on one of these cool sites for 4-6 hours, your browser could start dragging the browser or system down. In addition, since all these links ARE often links, you get someone like me who comes along and opens up windows in new tabs when he wants to work on something specific, and you can get a lot of unpredictable results if you were counting on the data in the browser to be there for context and I suddenly opened a new tab.

But hey, everything has a cost, right?
_______________________________________________
New York PHP Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

NYPHPCon 2006 Presentations Online
http://www.nyphpcon.com

Show Your Participation in New York PHP
http://www.nyphp.org/show_participation.php

Reply via email to