| A new design for the Web | p. 3 |
| Why Ajax rich clients? | p. 5 |
| The four defining principles of Ajax | p. 17 |
| Ajax rich clients in the real world | p. 24 |
| Alternative to Ajax | p. 28 |
| First steps with Ajax | p. 31 |
| The key elements of Ajax | p. 32 |
| Orchestrating the user experience with JavaScript | p. 34 |
| Defining look and feel using CSS | p. 36 |
| Organizing the view using the DOM | p. 45 |
| Loading data asynchronously using XML technologies | p. 56 |
| What sets Ajax apart | p. 65 |
| Introducing order to Ajax | p. 69 |
| Order out of chaos | p. 71 |
| Some small refactoring case studies | p. 77 |
| Model-view-controller | p. 91 |
| Web server MVC | p. 93 |
| Third-party libraries and frameworks | p. 103 |
| The page as an application | p. 119 |
| A different kind of MVC | p. 120 |
| The view in an Ajax application | p. 124 |
| The controller in an Ajax application | p. 134 |
| Models in an Ajax application | p. 143 |
| Generating the view from the model | p. 147 |
| The role of the server | p. 159 |
| Working with the server side | p. 160 |
| Coding the server side | p. 161 |
| The big picture : common server-side designs | p. 164 |
| The details : exchanging data | p. 174 |
| Writing to the server | p. 193 |
| The user experience | p. 211 |
| Getting it right : building a quality application | p. 212 |
| Keeping the user informed | p. 216 |
| Designing a notification system for Ajax | p. 222 |
| Implementing a notification framework | p. 226 |
| Using the framework with network requests | p. 237 |
| Indicating freshness of data | p. 241 |
| Security and Ajax | p. 246 |
| JavaScript and browser security | p. 247 |
| Communicating with remote services | p. 251 |
| Protecting confidential data | p. 263 |
| Policing access to Ajax data streams | p. 268 |
| Performance | p. 279 |
| What is performance? | p. 280 |
| JavaScript execution speed | p. 281 |
| JavaScript memory footprint | p. 302 |
| Designing for performance | p. 311 |
| Dynamic double combo | p. 327 |
| A double-combo script | p. 328 |
| The client-side architecture | p. 331 |
| Implementing the server : VB.NET | p. 334 |
| Presenting the results | p. 339 |
| Advanced issues | p. 343 |
| Refactoring | p. 345 |
| Type-ahead suggest | p. 361 |
| Examining type-ahead frameworks | p. 362 |
| The server-side framework : C# | p. 366 |
| The client-side framework | p. 369 |
| Adding functionality : multiple elements with different queries | p. 392 |
| Refactoring | p. 392 |
| The enhanced Ajax web portal | p. 423 |
| The evolving portal | p. 424 |
| The Ajax portal architecture using Java | p. 427 |
| The Ajax login | p. 429 |
| Implementing DHTML windows | p. 439 |
| Adding Ajax autosave functionality | p. 448 |
| Refactoring | p. 453 |
| Live search using XSLT | p. 466 |
| Understanding the search techniques | p. 467 |
| The client-side code | p. 473 |
| The server-side code : PHP | p. 476 |
| Combining the XSLT and XML documents | p. 481 |
| Completing the search | p. 485 |
| Refactoring | p. 491 |
| Building stand-alone applications with Ajax | p. 503 |
| Reading information from the outside world | p. 504 |
| Creating the rich user interface | p. 509 |
| Loading the RSS feeds | p. 518 |
| Adding a rich transition effect | p. 524 |
| Additional functionality | p. 528 |
| Table of Contents provided by Blackwell. All Rights Reserved. |