使用 XML HTTP Request 对象[翻译](4)
作者:子乌 来源:子乌的叶子 发布时间:2007-11-07 21:11:00
使用JSON作为传输语言
虽然XML能够被用于编码(encode)你用这个对象取回的数据,并通过来访问数据,但是XML还是不能被很好的支持,一些浏览器要求资源的内容类型必须是两种可能的XML mime-type之一:text/xml或application/xml才能够被接受,而且你处理的XML永远可能会出现问题。JSON是一个很好的替换技术,它解析速度很快,而且,在脚本中访问,速度快得多得多。
我在我的Flight Routeplanner中使用了来查找航班的信息,比如London Heathrow,你能够轻易的将返回的JSON使用new Function初始函数转换成一个脚本对象,这个对象将检查状态,如果从iata代码中查找航班失败的话,将返回一个404给脚本(it checks the status as the script returns 404 if it fails to find an airport with that iata code)。
xmlhttp.open("GET","/routeplanner/airport.1?LHR",true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
if (xmlhttp.status!=404) {
var local=new Function("return "+xmlhttp.responseText)();
alert("Code - Name\n"+local[0].id+' - '+local[0].name);
} else {
alert("Airport not found");
}
}
}
xmlhttp.send(null);
使用XMLHTTP操作GOOGLE的SOAP API
Google针对它的数据库提供了一个SOAP接口。你为了发出请求,需要注册一个可以每天使用1000次的key。然后你需要自己解析返回的XML文件。
search="Word"
xmlhttp.open("POST", "http://api.google.com/search/beta2",true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4) {
alert(xmlhttp.responseText)
}
}
xmlhttp.setRequestHeader("Man", "POST http://api.google.com/search/beta2 HTTP/1.1")
xmlhttp.setRequestHeader("MessageType", "CALL")
xmlhttp.setRequestHeader("Content-Type", "text/xml")
xmlhttp.send("<?xml version='1.0' encoding='UTF-8'?>"+"\n\n"+"<SOAP-ENV:Envelope"+
' xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"'+
' xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"'+
' xmlns:xsd="http://www.w3.org/1999/XMLSchema">'+
'<SOAP-ENV:Body><ns1:doGoogleSearch'+
' xmlns:ns1="urn:GoogleSearch"'+
' SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">'+
'<key xsi:type="xsd:string">GOOGLEKEY</key> <q'+
' xsi:type="xsd:string">'+search+'</q> <start'+
' xsi:type="xsd:int">0</start> <maxResults'+
' xsi:type="xsd:int">10</maxResults> <filter'+
' xsi:type="xsd:boolean">true</filter> <restrict'+
' xsi:type="xsd:string"></restrict> <safeSearch'+
' xsi:type="xsd:boolean">false</safeSearch> <lr'+
' xsi:type="xsd:string"></lr> <ie'+
' xsi:type="xsd:string">latin1</ie> <oe'+
' xsi:type="xsd:string">latin1</oe>'+
'</ns1:doGoogleSearch>'+
'</SOAP-ENV:Body></SOAP-ENV:Envelope>')
Google使用的是SOAP接口,许多人认为SOAP存在需要值得慎重考虑的问题。而REST也许是一个更好的模型,因为它能够与当前的web框架、代理、缓存等等进行协作。所以虽然我们能够使用XML HTTP Request与soap通信,在我们确实没法控制服务端所所发生的一切之前还是尽量不要使用它。(感谢Dan Schmierer指出了我脚本中的一个错误。)
默认情况下这个对象只能回调同一台服务器,而在一个安全要求降低的环境下(指通过file://访问),IE能够访问任何的域,而Mozilla也那能够实现,如果你提出请求,就会获取适当的权限。(子乌注:下面这句我不会翻译。。。啥意思?"a google thread I can't get to offline!")
脚注1:实际上许多“AJAX”应用程序几乎不使用这个XML HTTP REQUEST对象,而是使用更老、但在大多数情况下更灵活的IFRAME执行远程脚本方法,但他们(“AJAX”应用程序)也能够使用这个对象,而且应该养成AJAX是一种使用XML HTTP REQUEST创建的应用程序的观念。
猜你喜欢
- 很多人对于CSS都是边干边学习,因为它不像C#之类的语言那么复杂,看起来似乎挺简单,然而正是这种对CSS的不完整的理解,导致了许多的CSS代
- 全局变量是魔鬼。在YUI中,我们仅用两个全局变量:YAHOO和YAHOO_config。YUI的一切都是使用YAHOO对象级的成员或这个成员
- 提到SQL Server 2005证书,很多人可能以为它只是用来在传输数据的时候起到加密作用的,但在深入了解后,你会发现它的用处还有很多。
- 希望对您有所帮助!推荐:[精品]ASP中常用的22个FSO文件操作函数 <%@ Language=VBScript
- 1、首先在系统盘中查找scrrun.dll,如果存在这个文件,请跳到第三步,如果没有,请执行第二步。 2、在安装文件目录i386中找到scr
- asp如何获知页面上的图象的实际尺寸大小?见下面的两个asp文件:<!--#include virtual="/i
- 如何在寸土寸金的首页上使页面的价值最大化,是每个网站设计者最关心的话题。用户关注的页面长度、宽度都是有限的。宽度自不必说,一般网站都会根据自
- 表一、运算符与特殊字符 运算符描述/选择子元素,返回左侧元素的直接子元素;如果"/"位于最左侧表示选择根结点的直接子元素
- 那么,现在如果给出一个权限编号,要去检索出用后这个权限的用户集合,就会需要在逗号分隔的多个权限编号中去匹配给出的这个权限编号。如果使用lik
- 你知道(X)HTML中最多余的标签中是什么吗?在我看来就是这个<a>标签,不错,就是每个网站使用最多的超级链接标签<a&g
- 3月27日,淘宝网获得了由国际权威机构G-CEM颁发的2008年度亚洲区在线客户体验大奖,这是全球互联网企业首次获得此殊荣。如何在让买家更方
- Exec sp_droplinkedsrvlogin ZYB,Null --删除映射(录与链接服务器上远程登录之间的映射) Exec sp_
- 如何制作一个防止多次刷新计数的图片计数器?请问如何做一个专业的图片计数器? <%countlong
- 为了安全我们经常给access数据库加上密码,这样就算让本人下载了数据库,那么想看到数据库中的数据也不是那么简单的,起码多了一层障碍!我们平
- jxdawei的blog:http://www.iwcn.net/本文讨论的是在web标准普及的形势下,网站程序员的定位以及如何与设计师配合
- 这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10万条数据的分页时间300多豪秒之间。风格A
- 今天在GOOGLE上查图片资料,这一幕真让我纠结啊:使用【向前】【向后】这种说法,就默认了有一个对比坐标,那就是当前显示的4张缩略图。点击【
- asp读取access数据库表名称的代码:<%strConn="DBQ="+server.mappath(&quo
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 7 - Set and Get Style Pro
- 内容摘要:Cookies的值比ASP其他集合(例如Form和ServerVariables)的值要复杂得多。Cookie是一小块由浏览器存贮