网络编程
位置:首页>> 网络编程>> XML编程>> 使用 XML HTTP Request 对象[翻译](4)

使用 XML HTTP Request 对象[翻译](4)

作者:子乌 来源:子乌的叶子 发布时间:2007-11-07 21:11:00 

标签:XML,XMLHTTP,ajax

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

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com