请问如何用一个CGI程序将通过浏览器FORM 提交来的参数转化为XML格式

fanping 2000-04-25 10:01:00
...全文
180 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wingcky 2001-04-13
  • 打赏
  • 举报
回复
唉,太可怜了,在SQL SEVER 2000中这问题早不是问题了,看一下“Configure SQL XML Support in IIS”
wingcky 2001-04-13
  • 打赏
  • 举报
回复
唉各位太可怜了,在SQL SERVER 2000 这问题早解决了。配置一下“Configure SQL XML Support in IIS”
osdx 2001-04-13
  • 打赏
  • 举报
回复
各位,

半年前的对策如今看来自然不合时宜了
所以无需炒旧贴、炒冷饭!
ender 2001-04-12
  • 打赏
  • 举报
回复
TO:x86(大雪)

你这样作很麻烦,效率低,容易出错……
JAVA有专门的API是搞这个的……
不过我也才开始研究……
x86 2000-12-19
  • 打赏
  • 举报
回复
如果你所说的XML格式就是XML文件格式的话,那不难呀,
自己生成一个文件就是了,不需要解析器的。写文件应该不是很难。
如果传过来的是XML数据,就需要解析器了。
我不知道是否理解了你的意思,用个例子说一下我的理解,如果理解错了,咱们再讨论讨论。

比如form传过来的数据是:
field value
--------------------------
username admin
password admin
age 18

然后你可以把这些数据插入到(或者生成一个新的)一个XML文件中:
...
<user_list>
....
<user>
<username>admin</username>
<password>admin</password>
<age>18</age>
</user>
....
<user_list>
...
flycondor 2000-12-19
  • 打赏
  • 举报
回复
如果是Perl,那你要有一个Perl的XML解析器
jonaph 2000-04-28
  • 打赏
  • 举报
回复
偶也在研究这个问题, 而且有不少心得,如有意思的话
可以共同研究一下
mailto : sujing78@263.net
or tel: (021)-53966655-2218
王释之 2000-04-28
  • 打赏
  • 举报
回复
有意思!
选择器速度提升
选择器的速度大幅度提高了,下表为jQuery1.1.2和1.1.3的选择器速度对比,提高了8倍多
Browser jQuery 1.1.2 jQuery 1.1.3 % Improvement
IE 6 4890ms 661ms 740%
Firefox 2 5629ms 567ms 993%
Safari 2 3575ms 475ms 753%
Opera 9.1 3196ms 326ms 980%
Average improvement: 867%

下表为jQuery1.1.3与常用的一些JS库选择器的对比:
Browser Prototype jQuery Mootools Ext Dojo
IE 6 1476ms 661ms 1238ms 672ms 738ms
Firefox 2 219ms 567ms 220ms 951ms 440ms
Safari 2 1568ms 475ms 909ms 417ms 527ms
Opera 9.1 220ms 326ms 217ms 296ms 220ms


更新项目


New Selectors
Unicode Selectors: This is a huge addition for those of you who want to use Unicode attribute values, IDs, class names, or tag names. You can now use them directly in jQuery selectors:

$("div.台北")
$("div#台北")
$("foo_bar台北")
$("div[@id=台北]")Escape Selectors: A frequently requested feature you can now select elements by ID (or other selector) that uses a special character, for example this will find the div that has the ID of “foo.bar”:

$("div#foo\\.bar")Inequality Selector: While this selector isn’t part of the CSS specification, it’s frequently used and included in other selector libraries, so we decided to add it in:

$("div[@id!=test]"):nth-child() improvements: This selector allows you to locate specific child elements. We’ve supported selectors like :nth-child(1) and :nth-child(odd) since the beginning of jQuery, now we’ve added advanced :nth-child selectors, such as:

$("div:nth-child(2n)")
$("div:nth-child(2n+1)")
$("div:nth-child(n)")Space-separated attributes: After being removed in jQuery 1.0, this selector has now been brought back by popular demand. It allows you to locate individual items in a space-separated attribute (such as a class or rel attribute).

$("a[@rel~=test]")Animation Improvements

参数:
options
返回值:
XMLHttpRequest
使用HTTP请求一个页面。
这是jQuery的低级AJAX实现。要查看高级抽象,见$.set、$.post等,这些方法更易于理解和使用。但是功能上有限制(例如,没有错误处理函数)。
警告:如果数据类型指定为"script",那么POST自动转化为GET方法。(因为script会作为一个嵌入页面的script标签进行载入)
$.ajax()函数返回它创建的XMLHttpRequest对象。在大部分情况下,你不需要直接操作此对象。通常,这个XMLHttpRequest对象主要用于需要手动中断XMLHttpRequest请求的时候。
注意:如果你指明了下面列出的数据类型,请确保服务端发送了正确的MIME响应类型(如. xml 的类型是 "text/xml")。错误的MIME类型能够导致脚本出现意想不到的问题。请查看AJAX的范例来了解数据类型的更多信息。
$.ajax()函数需要一个参数一个包含有键/值对的对象,用于初始化并操作请求对象。
在jQuery 1.2版本中,如果你指明了一个JSONP回调函数,你就可以从其它的域中载入JSON类型的数据,写法类似于 "myurl?callback=?" 。jQuery会自动调用正确的方法名称来代替查询字符串,执行你指定的回调函数。或者,你也可以指定jsonp的数据类型的回调函数,此函数会自动添加到Ajax请求中。
参数选项:
async(true) 数据类型: Boolean
默认情况下,所有的请求都是异步发送的(默认为true)。 如果需要发送同步请求, 设置选项为false。注意,同步请求可能会暂时的锁定浏览器, 当请求激活时不能进行任何操作。
beforeSend 数据类型: Function
一个预处理函数用于在发送前修改XMLHttpRequest对象,设置自定义头部等。 XMLHttpRequest作为惟一的参数被传递。这是一个 Ajax 事件。 function (XMLHttpRequest) {
this; // the options for this ajax request
}cache(true) 数据类型: Boolean
jQuery 1.2中新添加的参数, 如果设为false,则会强制浏览器不缓存请求的页面。
complete 数据类型: Function
当请求完成时执行的函数(在成功或失败之后执行)。这个函数有2个参数: XMLHttpRequest对象和一个描述HTTP相应的状态字符串。 这是一个 Ajax 事件。 function (XMLHttpRequest, textStatus) {
this; // the options for this ajax request
}contentType("application/x-www-form-urlencoded") 数据类型: String
发送到服务器的数据的内容类型。默认是 "application/x-www-form-urlencoded", 适合大多数情况。
data 数据类型: Object,String
要发送给服务器的数据。如果不是字符串,那么它会被转化一个查询字符串。在GET请求中它被添加到url的末尾。要防止这种自动转化,请查看processData选项。 数据对象必须是一组键/值对。如果键对应的值是数组,jQuery会将其值赋给同一个键属性。 例如 {foo:["bar1", "bar2"]} 变为 '&foo=bar1&foo=bar2'。
dataType( Intelligent Guess (xml or html)) 数据类型: String
期待由服务器返回值类型。如果没有明确指定,jQuery会根据实际返回的MIME类型自动的将responseXML或responseText传递给success指定的回调函数。有效的类型(返回的类型的结果值会作为第一个参数传递给success指定的回调函数)有: "xml": 返回一个可以由jQuery处理的XML文档。
"html": 返回文本格式的HTML代码。包括求值后的脚本标记。
"script": 将响应作为Javascript语句求值,并返回纯文本。不缓存此脚本,除非设置了cache选项。设置为"script"类型会将post方法转换为get方法。
"json": 将响应作为JSON求值,并返回一个Javascript对象。
"jsonp": 使用JSONP载入一个JSON代码块. 会在URL的末尾添加"?callback=?"来指明回调函数。(jQuery 1.2以上的版本支持)
"text": 文本格式的字符串
error 数据类型: Function
请求失败时执行的函数。函数具有3个参数: XMLHttpRequest对象,一个描述产生的错误类型和一个可选的异常对象, 如果有的化。 这是一个Ajax 事件。function (XMLHttpRequest, textStatus, errorThrown) {
// typically only one of textStatus or errorThrown
// will have info
this; // the options for this ajax request
}global(true) 数据类型: Boolean
是否为当前的请求触发全局AJAX事件处理函数,默认值为true。设置为false可以防止触发像ajaxStart或ajaxStop这样的全局事件处理函数。这可以用于控制多个不同的Ajax事件。
ifModified(false) 数据类型: Boolean
只有响应自上次请求后被修改过才承认是成功的请求。是通过检查头部的Last-Modified值实现的。默认值为false,即忽略对头部的检查
jsonp 数据类型: String
在jsonp请求中重新设置回调的函数。这个值用于代替'callback=?'中的查询字符串。'callback=?'位于get请求中url的末尾或是post请求传递的数据中。因此设置 {jsonp:'onJsonPLoad'} 会将 'onJsonPLoad=?' 传送给服务器。
processData(true) 数据类型: Boolean
在默认的情况下,如果data选项传进的数据是一个对象而不是字符串,将会自动地被处理和转换成一个查询字符串,以适应默认的content-type--"application/x-www-form-urlencoded"。如果想发送DOMDocuments,就要把这个选项设置为false。
success 数据类型: Function
当请求成功时调用的函数。这个函数会得到二个参数:从服务器返回的数据(根据“dataType”进行了格式化)和一个描述HTTP相应的状态字符串。这是一个 Ajax 事件。 function (data, textStatus) {
// data could be xmlDoc, jsonObj, html, text, etc...
this; // the options for this ajax request
}timeout 数据类型: Number
如果通过$.ajaxSetup设置了一个全局timeout,那么此函数使用一个局部timeout覆盖了全局timeout(单位为毫秒)。例如,你可以设置比较长的延迟给一个特殊的请求,同时其他所有请求使用1秒的延迟。有关全局延迟,见$.ajaxTimeout()。
type("GET") 数据类型: String
请求的类型 ("POST" 或 "GET"), 默认是 "GET"。注意:其他的HTTP请求方法,如PUT和DELETE,在这里也可以使用,当时它们并不被所有的浏览器支持。
url(The current page) 数据类型: String
请求发送的目标URL地址
username 数据类型: String
username可用于在响应一个HTTP连接时的认证请求。 实例
载入并执行一个JavaScript文件。
$.ajax({
type: "GET",
url: "test.js",
dataType: "script"
});保存数据到服务器,完成后通知用户。
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});取得一个HTML页面的最新版本。
$.ajax({
url: "test.html",
cache: false,
success: function(html){
$("#results").append(html);
}
});同步载入数据。在执行请求的时候阻塞浏览器。这是在保证数据的同步性比交互更重要的情况下的一种更好的方法。
var html = $.ajax({
url: "some.php",
async: false
}).responseText;向服务器发送xml文档数据。通过设置processData选项为false,将数据自动转换为string的动作被禁止了。
var xmlDocument = [create xml document];
$.ajax({
url: "page.php",
processData: false,
data: xmlDocument,
success: handleResponse
});load( url, [data], [callback] )参数:
url (String): 装入页面的URL地址。
params (Map): (可选)发送到服务端的键/值对参数
callback (Function): (可选) 当数据装入完成时执行的函数. function (responseText, textStatus, XMLHttpRequest) {
this; // dom element
}返回值:
jQuery
装入一个远程HTML内容到一个DOM结点。 默认使用get方法发送请求,但如果指定了额外的参数,将会使用post方法发送请求。在 jQuery 1.2中,可以在URL参数中指定一个jQuery选择器,这会过滤返回的HTML文档,只取得文档中匹配选择器的元素。此语法类似于"url #some > selector"。
实例
载入文档的sidebar的导航部分到一个无序列表中。
$("#links").load("/Main_Page #p-Getting-Started li");将feeds.html文件载入到id为feeds的div中。
$("#feeds").load("feeds.html");同上,但是发送了附加的参数,并且在响应结束后执行一个自定义函数。
$("#feeds").load("feeds.php", {limit: 25}, function(){
alert("The last 25 entries in the feed have been loaded");
});jQuery.get( url, [data], [callback] )参数:
url (String): 装入页面的URL地址
Map(可选): (可选)发送到服务端的键/值对参数
callback (Function): (可选) 当远程页面装入完成时执行的函数 function (data, textStatus) {
// data可以是xmlDoc, jsonObj, html, text, 等...
this; // the options for this ajax request
}返回值:
XMLHttpRequest
使用GET请求一个页面。
这是向服务器发送get请求的简单方法。它可以指定一个回调函数,在请求完成后执行(只有在请求成功时)。如果还需要设置error和success回调函数,则需要使用$.ajax。
实例
请求test.php页,忽略返回值.
$.get("test.php");请求test.php页并发送附加数据(忽略返回值).
$.get("test.php", { name: "John", time: "2pm" } );显示从test.php请求的返回值(HTML 或 XML, 根据不同返回值).
$.get("test.php", function(data){
alert("Data Loaded: " + data);
});显示向test.cgi发送附加数据请求的返回值 (HTML 或 XML, 根据不同返回值).
$.get("test.cgi", { name: "John", time: "2pm" },
function(data){
alert("Data Loaded: " + data);
});jQuery.getJSON( url, [data], [callback] )参数:
url (String): 装入页面的URL地址
Map(可选): (可选)发送到服务端的键/值对参数
callback (Function): (可选) 当数据装入完成时执行的函数 function (data, textStatus) {
// data will be a jsonObj
this; // the options for this ajax request
}返回值:
XMLHttpRequest
使用GET请求JSON数据。
在jQuery 1.2版本中,如果你指明了一个JSONP回调函数,你就可以从其它的域中载入JSON类型的数据,写法类似于 "myurl?callback=?" 。jQuery会自动调用正确的方法名称来代替查询字符串,执行你指定的回调函数。或者,你也可以指定jsonp的数据类型的回调函数,此函数会自动添加到Ajax请求中。注意: 请记住, that lines after this function will be executed before callback.
实例
从Flickr JSONP API中载入最新的四幅猫的图片
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data){
$.each(data.items, function(i,item){
$("").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});从test.js载入JSON数据, 从返回的JSON数据读取name值。
$.getJSON("test.js", function(json){
alert("JSON Data: " + json.users[3].name);
});从test.js载入JSON数据, 传递一个附加参数,从返回的JSON数据读取name值。
$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){
alert("JSON Data: " + json.users[3].name);
});显示向test.php发送请求的返回值 (HTML 或 XML, 根据不同返回值).
$.getIfModified("test.php", function(data){
alert("Data Loaded: " + data);
});显示向test.php发送请求的返回值 (HTML 或 XML, 根据不同返回值),提供了一个附加的参数.
$.getIfModified("test.php", { name: "John", time: "2pm" },
function(data){
alert("Data Loaded: " + data);
});列出从pages.php返回的查询结果,将返回的数组转化为一段HTML代码。
var id=$("#id").attr("value");
$.getJSON("pages.php",{id:id},dates);
function dates(datos)
{
$("#list").html("Name:"+datos[1].name+"
"+"Last Name:"+datos[1].lastname+"
"+"Address:"+datos[1].address);
}jQuery.getScript( url, [callback] )参数:
url (String): 装入页面的URL地址
callback (Function): (可选) 当数据装入完成时执行的函数 function (data, textStatus) {
// data应该是javascript
this; // the options for this ajax request
}返回值:
XMLHttpRequest
使用GET请求JavaScript文件并执行。
在jQuery 1.2前, getScript只能从页面所在的主机载入脚本,1.2中, 你可以从任何主机载入脚本。警告: Safari 2 及其更老的版本不能在全局上下文中正确识别脚本。如果你通过getScript载入函数,请保证设置一个延迟来执行这个脚本。
实例
我们动态的载入一个新的官方jQuery颜色动画插件,载入后绑定一些动画效果到元素上。
$.getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js", function(){
$("#go").click(function(){
$(".block").animate( { backgroundColor: 'pink' }, 1000)
.animate( { backgroundColor: 'blue' }, 1000);
});
});载入test.js JavaScript文件并执行。
$.getScript("test.js");载入test.js JavaScript文件并执行,当执行结束后显示一条警告信息。
$.getScript("test.js", function(){
alert("Script loaded and executed.");
});jQuery.post( url, [data], [callback], [type] )参数:
url (String): 装入页面的URL地址
Map(可选): (可选)发送到服务端的键/值对参数
callback (Function): (可选) 当数据装入完成时执行的函数 function (data, textStatus) {
// data可能是 xmlDoc, jsonObj, html, text, 等...
this; // the options for this ajax request
}String $.postJSON = function(url, data, callback) {
$.post(url, data, callback, "json");
};返回值:
XMLHttpRequest
使用POST请求一个页面。
这是向服务器发送post请求的简单方法。它可以指定一个回调函数,在请求完成后执行(只有在请求成功时)。如果还需要设置error和success回调函数,则需要使用$.ajax。
ajaxComplete( callback )参数:
callback (Function): 要执行的函数 function (event, XMLHttpRequest, ajaxOptions) {
this; // dom element listening
}返回值:
jQuery
一个AJAX请求结束后,执行一个函数。这是一个Ajax事件
实例
当AJAX请求完成时显示一条信息。
$("#msg").ajaxComplete(function(request, settings){
$(this).append("
  • Request Complete.
  • ");
    });ajaxError( callback )参数:
    callback (Function): 要执行的函数 function (event, XMLHttpRequest, ajaxOptions, thrownError) {
    // thrownError only passed if an error was caught
    this; // dom element listening
    }返回值:
    jQuery
    一个AJAX请求失败后,执行一个函数。这是一个Ajax事件.
    实例
    当AJAX请求错误时显示一条信息。
    $("#msg").ajaxError(function(request, settings){
    $(this).append("
  • Error requesting page " + settings.url + "
  • ");
    });ajaxSend( callback )参数:
    callback (Function): 要执行的函数 function (event, XMLHttpRequest, ajaxOptions) {
    this; // dom element listening
    }返回值:
    jQuery
    一个AJAX请求发送时,执行一个函数。这是一个Ajax事件.
    实例
    当AJAX请求发出后显示一条信息。
    $("#msg").ajaxSend(function(evt, request, settings){
    $(this).append(" });ajaxStart( callback )参数:
    callback (Function): 要执行的函数 function () {
    this; // dom element listening
    }返回值:
    jQuery
    一个AJAX请求开始但还没有激活时,执行一个函数。这是一个Ajax事件.
    实例
    当AJAX请求开始(并还没有激活时)显示loading信息。
    $("#loading").ajaxStart(function(){
    $(this).show();
    });ajaxStop( callback )参数:
    callback (Function): 要执行的函数 function () {
    this; // dom element listening
    }返回值:
    jQuery
    当所有的AJAX都停止时,执行一个函数。这是一个Ajax事件.
    实例
    当所有AJAX请求都停止时,隐藏loading信息。
    $("#loading").ajaxStop(function(){
    $(this).hide();
    });ajaxSuccess( callback )参数:
    callback (Function): 要执行的函数 function (event, XMLHttpRequest, ajaxOptions) {
    this; // dom element listening
    }返回值:
    jQuery
    一个AJAX请求成功完成后,执行一个函数。这是一个Ajax事件
    实例
    当AJAX请求成功完成时,显示信息。
    $("#msg").ajaxSuccess(function(evt, request, settings){
    $(this).append("
  • Successful Request!
  • ");
    });jQuery.ajaxSetup( options )参数:
    Options: 用于Ajax请求的键/值对
    为所有的AJAX请求进行全局设置。查看$.ajax函数取得所有选项信息。
    实例
    设置默认的全局AJAX请求选项。
    $.ajaxSetup({
    url: "/xmlhttp/",
    global: false,
    type: "POST"
    });
    $.ajax({ data: myData });serialize( )返回值:
    jQuery
    以名称和值的方式连接一组input元素。返回值类似于: single=Single2&multiple=Multiple&multiple=Multiple3&radio=radio2 。在jQuery 1.2中。serialize方法实现了正确表单元素序列,而不再需要插件支持。
    实例
    连接表单元素的一组查询字符串,可用于发送Ajax请求。
    function showValues() {
    var str = $("form").serialize();
    $("#results").text(str);
    }

    $(":checkbox, :radio").click(showValues);
    $("select").change(showValues);
    showValues();serializeArray( )返回值:
    jQuery
    连接所有的表单和表单元素(类似于.serialize()方法),但是返回一个JSON数据格式
    实例
    form中取得一组值,显示出来
    function showValues() {
    var fields = $(":input").serializeArray();
    alert(fields);
    $("#results").empty();
    jQuery.each(fields, function(i, field){
    $("#results").append(field.value + " ");
    });
    }

    $(":checkbox, :radio").click(showValues);
    $("select").change(showValues);
    showValues();
    第 1 部分: Ajax 简介 Ajax 由 HTML、JavaScript™ 技术、DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界 面转化成交互性的 Ajax 应用程序。本系列的作者是一位 Ajax 专家,他演示了这些技术如何协同工作 —— 从总体概述到细节的讨论 —— 使高效的 Web 开发成为现实。他还揭开了 Ajax 核心概念的神秘 面纱,包括 XMLHttpRequest 对象。 五年前,如果不知道 XML,您就是一只无人重视的丑小鸭。十八个月前,Ruby 成了关注的中心,不知道 Ruby 的程序员只能坐冷板凳了。今天,如果想跟上最新的技术时尚,那您的目标就是 Ajax。 但是,Ajax 不仅仅 是一种时尚,它是一种构建网站的强大方 法,而且不像学习一种全新的语言那样困难。 但在详细探讨 Ajax 是什么之前,先让我们花几分钟了解 Ajax 做 什么。目前,编写应用程序时有两种基本的选择:  桌面应用程序  Web 应用程序 两者是类似的,桌面应用程序通常以 CD 为介质(有时候可从网站下载)并完全安装到您的计算机上。桌 面应用程序可能使用互联网下载更新,但运行这些应用程序的代码在桌面计算机上。Web 应用程序运行 在某处的 Web 服务器上 —— 毫不奇怪,要通过 Web 浏览器访问这种应用程序。 不过,比这些应用程序的运行代码放在何处更重要的是,应用程序如何运转以及如何与其进行交互。桌面 应用程序一般很快(就在您的计算机上运行,不用等待互联网连接),具有漂亮的用户界面(通常和操作 系统有关)和非凡的动态性。可以单击、选择、输入、打开菜单和子菜单、到处巡游,基本上不需要等待。 另一方面,Web 应用程序是最新的潮流,它们提供了在桌面上不能实现的服务(比如 Amazon.com 和 eBay)。但是,伴随着 Web 的强大而出现的是等待,等待服务器响应,等待屏幕刷新,等待请求返回 和生成新的页面。 显然这样说过于简略了,但基本的概念就是如此。您可能已经猜到,Ajax 尝试建立桌面应用程序的功能 和交互性,与不断更新的 Web 应用程序之间的桥梁。可以使用像桌面应用程序中常见的动态用户界面和 漂亮的控件,不过是在 Web 应用程序中。 还等什么呢?我们来看看 Ajax 如何将笨拙的 Web 界面转化成能迅速响应的 Ajax 应用程序吧。 老技术,新技巧 在谈到 Ajax 时,实际上涉及到多种技术,要灵活地运用它必须深入了解这些不同的技术(本系列的头几 篇文章将分别讨论这些技术)。好消息是您可能已经非常熟悉其中的大部分技术,更好的是这些技术都很 容易学习,并不像完整的编程语言(如 Java 或 Ruby)那样 困难。 下面是 Ajax 应用程序所用到的基本技术:  HTML 用于建立 Web 表单并确定应用程序其他部 分使用的字段。  JavaScript 代码是运行 Ajax 应用程序的核心代码, 帮助改进与服务器应用程序的通信。  DHTML 或 Dynamic HTML,用于动态更新表单。 我们将使用 div、span 和其他动态 HTML 元素来标 记 HTML。 请访问 Ajax 技术资源中心,这是有 关 Ajax 编程模型信息的一站式中 心,包括很多文档、教程、论坛、blog、 wiki 和新闻。任何新信息都能在这里 找到。 Ajax 的定义 顺便说一下,Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写。这 个短语是 Adaptive Path 的 Jesse James Garrett 发明的(请参阅 参 考资料),按照 Jesse 的解释,这不 是 个首字母缩写词。  文档对象模型 DOM 用于(通过 JavaScript 代码)处理 HTML 结构和(某些情况下)服务器 返回的 XML。 我们来进一步分析这些技术的职责。以后的文章中我将深入讨论这些技术,目前只要熟悉这些组件和技术 就可以了。对这些代码越熟悉,就越容易从对这些技术的零散了解转变到真正把握这些技术(同时也真正 打开了 Web 应用程序开发的大门)。 XMLHttpRequest 对象 要了解的一个对象可能对您来说也是最陌生的,即 XMLHttpRequest。这是一个 JavaScript 对象,创建 该对象很简单,如清单 1 所示。 清单 1. 创建新的 XMLHttpRequest 对象 [removed] var xmlHttp = new XMLHttpRequest(); [removed] 下一期文章中将进一步讨论这个对象,现在要知道这是处理所有服务器通信的对象。继续阅读之前,先停 下来想一想:通过 XMLHttpRequest 对象与服务器进行对话的是 JavaScript 技术。这不是一般的应用程 序流,这恰恰是 Ajax 的强大功能的来源。 在一般的 Web 应用程序中,用户填写表单字段并单击 Submit 按钮。然后整个表单发送到服务器,服 务器将它转发给处理表单的脚本(通常是 PHP 或 Java,也可能是 CGI 进程或者类似的东西),脚本执 行完成后再发送回全新的页面。该页面可能是带有已经填充某些数据的新表单的 HTML,也可能是确认页 面,或者是具有根据原来表单中输入数据选择的某些选项的页面。当然,在服务器上的脚本或程序处理和 返回新表单时用户必须等待。屏幕变成一片空白,等到服务器返回数据后再重新绘制。这就是交互性差的 原因,用户得不到立即反馈,因此感觉不同于桌面应用程序。 Ajax 基本上就是把 JavaScript 技术和 XMLHttpRequest 对象放在 Web 表单和服务器之间。当用户填 写表单时,数据发送给一些 JavaScript 代码而不是 直接发送给服务器。相反,JavaScript 代码捕获表 单数据并向服务器发送请求。同时用户屏幕上的表单也不会闪烁、消失或延迟。换句话说,JavaScript 代 码在幕后发送请求,用户甚至不知道请求的发出。更好的是,请求是异步发送的,就是说 JavaScript 代 码(和用户)不用等待服务器的响应。因此用户可以继续输入数据、滚动屏幕和使用应用程序。 然后,服务器将数据返回 JavaScript 代码(仍然在 Web 表单中),后者决定如何处理这些数据。它可 以迅速更新表单数据,让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。 JavaScript 代码甚至可以对收到的数据执行某种计算,再发送另一个请求,完全不需要用户干预!这就 是 XMLHttpRequest 的强大之处。它可以根据需要自行与服务器进行交互,用户甚至可以完全不知道幕后 发生的一切。结果就是类似于桌面应用程序的动态、快速响应、高交互性的体验,但是背后又拥有互联网 的全部强大力量。 加入一些 JavaScript 得到 XMLHttpRequest 的句柄后,其他的 JavaScript 代码就非常简单了。事实上,我们将使用 JavaScript 代码完成非常基本的任务:  获取表单数据:JavaScript 代码很容易从 HTML 表单中抽取数据并发送到服务器。  修改表单上的数据:更新表单也很简单,从设置字段值到迅速替换图像。  解析 HTML 和 XML:使用 JavaScript 代码操纵 DOM(请参阅 下一节),处理 HTML 表 单服务器返回的 XML 数据的结构。 对于前两点,需要非常熟悉 getElementById() 方法,如 清单 2 所示。 清单 2. 用 JavaScript 代码捕获和设置字段值 // Get the value of the "phone" field and stuff it in a variable called phone var phone = document.getElementById("phone").value; // Set some values on a form using an array called response document.getElementById("order").value = response[0]; document.getElementById("address").value = response[1]; 这里没有特别需要注意的地方,真是好极了!您应该认识到这里并没有非常复杂的东西。只要掌握了 XMLHttpRequest,Ajax 应用程序的其他部分就是如 清单 2 所示的简单 JavaScript 代码了,混合有少 量的 HTML。同时,还要用一点儿 DOM,我们就来看看吧。 以 DOM 结束 最后还有 DOM,即文档对象模型。可能对有些读者来说 DOM 有点儿令人生畏,HTML 设计者很少使用 它,即使 JavaScript 程序员也不大用到它,除非要完成某项高端编程任务。大量使用 DOM 的是 复杂 的 Java 和 C/C++ 程序,这可能就是 DOM 被认为难以学习的原因。 幸运的是,在 JavaScript 技术中使用 DOM 很容易,也非常直观。现在,按照常规也许应该说明如何使 用 DOM,或者至少要给出一些示例代码,但这样做也可能误导您。即使不理会 DOM,仍然能深入地探 讨 Ajax,这也是我准备采用的方法。以后的文章将再次讨论 DOM,现在只要知道可能需要 DOM 就可 以了。当需要在 JavaScript 代码和服务器之间传递 XML 和改变 HTML 表单的时候,我们再深入研究 DOM。没有它也能做一些有趣的工作,因此现在就把 DOM 放到一边吧

    8,906

    社区成员

    发帖
    与我相关
    我的任务
    社区描述
    XML/XSL相关问题讨论专区
    社区管理员
    • XML/XSL社区
    加入社区
    • 近7日
    • 近30日
    • 至今
    社区公告
    暂无公告

    试试用AI创作助手写篇文章吧