Ajax跨域访问XML数据的另一种方式——使用YQL查询语句
2023-09-27 14:23:13 时间
XML数据默认是不能在客户端通过Ajax跨域请求读取的,一般的做法是在服务器上写一个简单的代理程序,将远程XML的数据先读到本地服务器,然后客户端再从本地服务器通过Ajax来请求。由于我们不能对数据源所在的环境进行任何设置和修改,所以仅通过客户端代码很难绕过这个问题。但如果请求的数据不是XML而是JSON对象或者JavaScript函数,则通过JSONP方法可以非常容易地解决,直接调用JQuery.getJSON()方法在回调函数中就可以获取到返回的结果。如果要使用JSONP,可以在指定的URL后面附加查询参数"&callback=?"。
$(document).ready(function() { $.getJSON("http://www.example.com/getdata", function(data) { console.log(data); }) });
$(document).ready(function() { $.getJSON("http://www.example.com/getdata2?callback=?", function(data) { console.log(data); }) });
除此之外,我们还可以借助于第三方平台提供的API来访问数据。YQL是Yahoo!提供的一套Web Service服务,通过它你可以像SQL语句一样访问互联网上的任何数据,而不存在跨域的问题。
//sample site that returns xml var site = 'http://feed.cnblogs.com/blog/u/53608/rss'; var yql = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent('select * from xml where url="' + site + '"') + '&format=xml&callback=?'; // Request that YSQL string, and run a callback function. // Pass a defined function to prevent cache-busting. $.getJSON(yql, function (data) { console.log(data.results[0]); });
YQL API的公共访问限制是同一IP每小时2000个请求,可以查看官网的介绍https://developer.yahoo.com/yql/guide/usage_info_limits.html
不过个人认为这种方法依然只是一个临时解决方案,对于一套完整的Web应用而言,过多地依赖于第三方系统会直接导致系统的稳定性和扩展性,而且会有较大的风险。试想,如果Yahoo!修改了Web Services的接口或者停止了YQL的公共访问,那么系统中所有依赖于YQL的部分都会出现问题。
相关文章
- ExtJS学习笔记2:响应事件、使用AJAX载入数据
- Capture 404 status with jQuery AJAX
- SpringMVC 实现返回一段数据 & 实现自动发送json格式数据 - AJAX
- Comet——随着AJAX技术兴起而产生的新技术
- ajax跨域--jsop方法
- ajax请求
- Ajax请求后台数据
- MVC3学习:利用mvc3+ajax实现删除记录
- Jquery ajax 数据更新
- ajax+asp.net2.0 sql2005三级联下拉框
- ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践
- EXTJS 资料 Ext.Ajax.request 获取返回数据
- ajax等待(比较慢时)(显示图片)
- ajax动态更新下拉列表
- js: 前端通过ajax方式获取后台数据填充下拉列表
- ajax 调用 java webapi 多个参数(一)
- ajax接收遍历处理json格式数据
- Aspx Ajax 调用 C#函数处理数据
- 3 Ways to Preload Images with CSS, JavaScript, or Ajax---reference
- 再谈Jquery Ajax方法传递到action
- ajax提交完表单数据依然跳转的解决办法