AJAX和动态JavaScript均指利用JavaScript在不重新加载整个页面的情况下创建网页交互,从而提升网站运行速度与用户响应灵敏度。
AJAX(异步JavaScript和XML)是动态JavaScript的子集,特指向Web服务器发起的异步请求操作;而动态JavaScript通常指无需服务器请求即可更改页面视图或添加信息的操作。
动态JavaScript常用于产品360度视图、选项卡式图片/详情切换及菜单操作等场景;AJAX则多应用于账户登录、注册、产品搜索及购物车添加等功能。
合理运用二者可简化操作流程(如实时校验用户名可用性)并减少页面信息过载,避免一次性向客户灌输过多内容。
Netscape Navigator 中包含的 JavaScript
将二者统称为编程“语言”并不准确。JavaScript是主要载体,但AJAX实为JavaScript、XML及服务器端脚本(如ASP、PHP)的组合。自1995年Netscape Navigator 2.0测试版发布以来,JavaScript便已被动态使用。“AJAX”一词虽由Jesse James Garrett于2005年提出,但该技术组合早在1999年即已存在。
AJAX 和动态 JavaScript 的示例
以下为具体应用实例:
动态图像查看示例,来自 Amazon。
Amazon的产品图像查看器即为动态JavaScript的典型应用:所有图像预先加载完毕,通过JavaScript在视口中移动,无需额外服务器请求。
AJAX请求示例展示了用户名验证过程:用户输入完成后触发后台脚本检查重名情况并即时反馈,避免了提交表单后才获知用户名不可用的麻烦。
由于核心要素均为动态变化,截图难以完全展示二者效果。当屏幕元素在不刷新页面的情况下发生变化时,通常即在使用其中一项技术。
代码是什么样的?
以下为上述用户名验证功能的AJAX查询代码示例,基于jQuery库构建(需预先引入该库)。
JavaScript:
[code] // prepare the script when page loads $(document).ready(function() { // hide the graphic which shows process $('#loading').hide(); // when the user leaves the input box, fire this function $('#username').blur(function(){ // show the graphic showing process $('#loading').show(); // fire the PHP script “check.php” via the POST method $.post("/ajax/check.php", { username: $('#username').val() }, function(response){ // retrieve the response and display $('#usernameResult').fadeOut(); setTimeout("respondAjax('usernameResult', '"+escape(response)+"')", 400); }); return false; }); }); // swaps the loading graphic with the actual server response function respondAjax(id, response) { $('#loading').hide(); $('#'+id).html(unescape(response)); $('#'+id).fadeIn(); } [/code] PHP: [code] $username = trim(htmlentities(mysql_real_escape_string($_POST['username']))); // get the username function check_username($username){ // check whether that username exists by querying database $result = mysql_query("SELECT name FROM users WHERE name='$username'"); if (mysql_num_rows($result) > 0) { // if there were greater than zero results, the name is in use return '<span class="error">Username already in use</span>'; } else if (!ctype_alnum($username)) { // if the name was not in use, but uses disallowed characters, return that error return '<span class="error">Not a valid username. Usernames may only use letters and numbers, and may not contain special characters including punctuation or spaces.</span>'; } else { // if everything was fine, say it was OK. return '<span class="response">Username Available</span>'; } } // run function and return results for use in AJAX data. echo check_username($username); [/code]AJAX 和动态 JavaScript 的局限性
作为网站的补充项,谨慎应用这些技术可有效支持业务目标,但过度使用会导致界面过于动态,反而令访客困惑。
主要限制在于JavaScript在客户端执行,性能取决于访客设备配置。低性能设备可能导致动态元素处理缓慢;网络受限或服务器响应延迟也会干扰AJAX体验,致使用户等待无果。
此外,若实施时未考虑无障碍性,可能导致屏幕阅读器无法读取或键盘无法操作,给残障用户带来障碍。
“动态” JavaScript 与 JavaScript
本质上所有JavaScript都是动态的(即在客户端而非服务器执行)。但在本语境下,“动态”特指控制、访问或操纵页面HTML元素的脚本,常被称为DHTML(动态HTML),尽管该术语并不能准确反映实际情况。
进一步了解资源的来源
W3 Schools提供DHTML教程以学习动态JavaScript基础,亦有大量AJAX开发教程。但面向普通用户的入门资源较少,多数教程要求具备CSS、HTML及JavaScript基础,且AJAX教程通常还需掌握至少一种服务器端编程语言。
若您仅需了解动态JavaScript的定义、功能及应用方式,本文已涵盖核心要点。
总结
对于非程序员商家而言,关键在于理解适用场景。应审慎评估技术方案是否真正提升用户体验,而非仅因视觉效果炫酷而采用。唯有切实有用的动态交互才值得部署。

