对于我正在开发的Web服务,我希望我的嵌入式代码(在客户端的站点上)从我的域中的服务器脚本中获取xml文件。
由于这是一个跨域请求,我想使用jsonp,因为它似乎是这种apis的事实上的标准。但是,对于我的应用程序,我更容易使用xml而不是json。现在,我当然可以将我的xml转换为服务器上的json,然后再返回到客户端站点javascript中的xml,但这似乎不必要地繁琐。我真正需要的是和xmlp解决方案,带有填充的xml。
我累了谷歌搜索但找不到这样做的jquery插件。有人知道一个简单的解决方案吗?
答案 0 :(得分:5)
您可以使用Yahoo! Query Language(YQL)之类的东西来避免为XML文件编写另一种输出格式。
例如,要通过JSONP-X获取此问题的XML Feed,您将使用YQL查询URL,如:
http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20xml%20where%20url%3D%27http%3A%2F%2Fstackoverflow.com%2Ffeeds%2Fquestion%2F2671143%27%20and%20itemPath%3D%27feed.entry%27&callback=my_jsonpx_handler
这给你一个如下结果;有效地包装在JSON回调中的XML:
my_jsonpx_handler({"query":…,"results":["<entry xmlns=\"http://www.w3.org/2005/Atom\">\n <id>http://stackoverflow.com/questions/2671143/is-there-an-existing-tool-for-jsonp-like-fetching-of-xml-in-jquery<\/id>\n <re:rank xmlns:re=\"http://purl.org/atompub/rank/1.0\" scheme=\"http://stackoverflow.com\">0<\/re:rank>…"]});
然后,您的小部件可以在YQL URL中查询其数据,这些数据又将与您服务器上的XML文件进行通信(具有缓存,速度等作为附加功能)。
答案 1 :(得分:4)
json工作的唯一原因是因为页面上包含的javascript可以在窗口中运行而不会出现任何x-domain问题。所以它必须保持javascript。但是,您可以缩小xml,确保它已正确转义并将其作为值发送到json对象中。
echo 'callback({data: "' + xml string + '"});';
或类似的东西。
答案 2 :(得分:1)
从jQuery 1.5开始,有一个实用工具方法,它使用jsonp加载XML保存了我的生命。
var xml = "<rss version='2.0'><channel><title>RSS Title</title></channel></rss>",
xmlDoc = $.parseXML( xml ),
$xml = $( xmlDoc ),
$title = $xml.find( "title" );