在Ajax 应用程序中实现数据之间交换

作者:凯旋网络来源:凯旋网络
何无法成为 URL 一部分的字符。例如,任何空白字符都用 %20 替换。

  示例代码下载中提供了一个实用函数 buildQueryString(),该函数可连接检索自数组的参数,通过 = 将每个参数的名称和值相分离,并将 & 字符置于每个名称-值对之间:

function buildQueryString(params) {
var query = "";
for (var i = 0; i <  params.length; i++) {
query += (i > 0 ? "&" : "")
+ escape(params[i].name) + "="
+ escape(params[i].value);
    }
return query;
}


  假设您要编码以下参数:

var someParams = [
{ name:"name",  value:"John Smith" },
{ name:"email", value:"john@company.com" },
{ name:"phone", value: "(123) 456 7890" }
];

buildQueryString(someParams) 调用将生成包含以下内容的结果:

name=John%20Smith&email=john@company.com&phone=%28123%29%20456%207890
 


  如果希望使用 GET 方法,则必须将查询附加至 URL 的 ? 字符之后。使用 POST 时,应通过 setRequestHeader() 将 Content-Type 标题设置为 application/x-www-form-urlencoded,且必须将该查询字符串传递至 XMLHttpRequest 的 send() 方法,这会将该 HTTP 请求发送至服务器。

创建 XML 文档。利用字符串通过其属性和数据构建元素是用 JavaScript 创建 XML 文档最简单的方法。如果采用这种解决方案,则需要一个实用方法来转义 &、< 、>、"、以及  字符:

function escapeXML(content) {
if (content == undefined)
return "";
if (!content.length || !content.charAt)
content = new String(content);
var result = "";
var length = content.length;
for (var i = 0; i <  length; i++) {
var ch = content.charAt(i);
switch (ch) {
case &:
result += "&";
break;
case < :
result += "< ";
break;
case >:
result += ">";
break;
case \":
result += """;
break;
case \\:
result += "&apos;";
break;
default:
result += ch;
        }
    }
return result;
}


  要使任务更为简单,还需要一些其他实用程序方法,例如:

function attribute(name, value) {
return " " + name + "=\"" + escapeXML(value) + "\"";
}


  以下示例从一个具有以下三个属性的对象的数组构建一个 XML 文档:symbol、shares 和 paidPrice:

function buildPortfolioDoc(stocks) {
var xml = "< portfolio>";
for (var i = 0; i <  stocks.length; i++) {
var stock = stocks[i];
xml += "< stock ";
xml += attribute("symbol", stock.symbol);
xml += attribute("shares", stock.shares);
xml += attribute("paidPrice", stock.paidPrice);
xml += "";
    }
xml += "< /portfolio>";
return xml;
}


  如果您喜好使用 DOM,则可使用 Web 浏览器的 API 分析 XML 和串行化 DOM 树。通过 IE,您可以用新的 ActiveXObject("Microsoft.XMLDOM") 创建一个空文档。然后,可以使用 loadXML() 或 load() 方法分别从字符串或 URL 分析该 XML。在使用 IE 的情况下,每个节点都有一个称为 xml 的属性,您可以利用它获得该节点及其所有子节点的 XML 表示。因此,您可以分析 XML 字符串、修改 DOM 树,然后将该 DOM 串行化回 XML。

Firefox 和 Netscape 浏览器允许您使用 document.implementation.createDocument(...) 创建一个空文档。然后,可以使用 createElement()、createTextNode()、createCDATASection() 等创建 DOM 节点。Mozilla 浏览器还提供了两个分别名为 DOMParser 和 XMLSerializer 的 API。DOMParser API 包含 parseFromStream()

  • 广告推荐