使用 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创建的应用程序的观念。


猜你喜欢
- 数据库中IP地址数据该怎么存?或许你已经不止一次遇到过这类问题,怎么存?varchar(255)不就完事儿了?坦白说,在我经历的几个项目中,
- 于是就测试了下: var stringToDom=function(text) { var doc; if(window.ActiveXOb
- 作为一个新世纪有思想有文化有道德时刻准备着的 * 丝男青年,在现在这样一个社会中,心疼我大慢播抵制大百度的前提下,没事儿上上网逛逛YY看看斗鱼翻
- 也许有人会说我火星了,但我的确是第一次知道,欢迎我从火星归来吧。在 Yahoo! 首页上隐藏着这样一个小秘密,大家到 www.yahoo.c
- 1、序列(拆包)*用作序列拆包:*可对字符串、列表、集合、元组、字典、数字元素等序列进行拆包print(*(1,2,3,4,5,6))#1
- 回调函数用起来比较爽。特别是在js中,满世界全是回调,那么在python中,怎么来优雅地实现自己的回调函数呢下面贴一个我写的例子class
- 由于最近项目,有这样一个需求,是把数据库中的两列数据互换,经过好久才搞定,这里写个简单实例,做过记录。1.创建表及记录用于测试CREATE
- string 对象 1、str.match(RegExp) 在str中搜索匹配RegExp的字符串并保存在一个数组内返回, 如果RegExp
- CentOS6.9安装Mysql5.7,供大家参考,具体内容如下一、上传安装包二、建立用户以及mysql的目录1、建立一个mysql的组输入
- 前言自动化测试中我们存放数据无非是使用文件或者数据库,那么文件可以是csv,xlsx,xml,甚至是txt文件,通常excel文件往往是我们
- Python HTTP客户端自定义Cookie实现实例几乎所有脚本语言都提供了方便的 HTTP 客户端处理的功能,Python 也不例外,使
- 在上篇博客中,提到了对一个脚本进行的多次优化。当时以为已经优化得差不多了,但是当测试人员测试时,我才发现,踩到了Python的一个大坑。在上
- 这些问题可能导致数据值的改变。一般而言,上述问题可能在你使用非二进制串数据类型(如char,varchar,text等数据类型)的情况下发生
- MySQL Load Data 的多种用法一、LOAD 基本背景我们在数据库运维过程中难免会涉及到需要对文本数据进行处理,并导入
- 后台数据库用是Access,客户用了一年后说打开界面非常慢,查看了数据库后发现数据表中的记录已有五万多条,自己试过将记录复制到10 万条,打
- python清空命令行 !有时我们在命令行上运行一些代码时,觉得有些冗余了,可以通过以下代码进行清除命令行上的代码。import osdef
- 简介集合是软件中的基本抽象。实现集合的方法有很多,例如 hash set、tree等。要实现一个整数集合,位图(bitmap,也称为 bit
- 有没有一种方法可以为Django项目中的每个应用程序创建多个自定义错误模板,我的意思是,在我的项目中,我有3个应用程序,每个应用程序将显示3
- 前言:Tkinter模块的Treeview组件类似于Dev中的treelist控件,但前者还可以当做树控件和表格控件使用,虽然功能可能没有d
- 递归一个函数在执行过程中一次或多次调用其本身便是递归,就像是俄罗斯套娃一样,一个娃娃里包含另一个娃娃。递归其实是程序设计语言学习过程中很快就