返回XML时使用JSONP

我问了一个早期的问题 ,这个问题肯定有用,让我知道JSONP。 但是,我发现我必须指定JSONP作为数据类型。 现在,据我所知,这是返回的数据的返回类型,即XML。 可以使用JSONP返回XML,还是仅限于以JSONP格式返回? 谢谢!

由于它的工作原理,你只能使用JSONP(而不是XML)。 JSONP变成了这个:

 

因此,当您获取内容时,它实际上是这样做的:

  

回来的是实际运行的JavaScript,所以它不能是XML,你会得到各种语法错误,就像你这样做:

  

可以想象,JavaScript解析器不会那么喜欢它,并且不知道如何处理它。 jQuery可以在大多数情况下解析XML而不会有任何麻烦,但是如果你正在使用JSONP并且它用于跨域请求......那么JSONP是你唯一的选择,除非你在你的站点上写了一个没有违反的代理页面同源策略规则,并将其用作通过获取XML的代理。

我们的想法是从服务器发回可执行代码。 编写jQuery插件或扩展ajax函数以将XML字符串作为函数参数返回。

 myCallback("   John Doe  ") 

该插件将此字符串解析为XML并将其返回到您的实际回调。 就你的回调而言,它不知道string -> xml转换过程。

这是一个现有的实现 。

使用jQuery最理想的接口是,

 $.ajax({ url: 'http://example.com/resource?type=xml', dataType: 'xmlp', success: function(xml) { .. } }); 

但是因为搞乱并重写jQuery.ajax是有问题的,你可以把它写成一个单独的命名空间插件本身,它将使用下面的getScript

 $.myNamespace.ajax({ .. }); 

为此,您需要控制服务器。 服务器必须知道请求XML,并使用包含XML字符串作为参数的函数调用进行响应。 假设您发送到远程服务器的回调名称为foo ,则服务器必须响应以下内容:

 foo("..") 

我想如果您使用的是支持E4X的浏览器,那么就不需要将XML包装在字符串中。 服务器可以简单地将XML作为参数返回给回调函数:

 foo(  John Doe  ) 

但不幸的是,E4X尚未获得广泛支持。

您可以在/* comment */中的Javascript函数中编写XML,并使用方法functionname.toString()将此函数转换为文本,并使用JSONP回调函数解析“ /* ”和“ */ ”之间的文本,该函数可用于所有旧浏览器。 示例xml_via_jsonp.js

 function myfunc() {/*  
Random1 - Random2
Random3
*/} function callback(func) { var myhtml = func.toString(); var htmlstart = myhtml.indexOf('/*'); var htmlend = myhtml.lastIndexOf('*/'); return myhtml.substr(htmlstart+2, htmlend-htmlstart-2); }