我问了一个早期的question,这绝对有帮助,并让我知道JSONP。但是,我看到我必须指定JSONP作为数据类型。现在,据我所知,这是返回的数据的返回类型,这将是XML。 XML可以使用JSONP返回还是仅限于以JSONP格式返回?谢谢!返回XML时使用JSONP
回答
由于工作原理,您仅限于JSONP(而不是XML)。 JSONP变成这样:
<script src="myPage?callback=myFunction" type="text/javscript">
所以,当你把内容,这是有效这样做:
<script type="text/javascript">
myFunction({ data: value, data2: value2 });
</script>
什么回来是实际运行JavaScript,所以它不可能是XML,你会得到各种各样的语法错误,正是,你会做这样的:
<script type="text/javascript">
<elem>
<data>value</data>
<data2>value2</data2>
</elem>
</script>
,你可以我magine,JavaScript解析器不会那么喜欢,并且不知道该如何处理它。 jQuery在大多数情况下可以毫不费力地解析XML,但是如果您使用的是JSONP并且它适用于跨域请求......那么JSONP是您唯一的选择,除非您在您的网站上编写了一个代理页面,它没有违反同源策略规则,并将其用作通过获取XML的代理。
这个想法是从服务器发回可执行代码。编写一个jQuery插件或扩展ajax函数以返回XML字符串作为函数参数。
myCallback("
<root>
<person>
<first>John</first>
<last>Doe</last>
</person>
</root>")
该插件会将此字符串解析为XML并将其返回给您的实际回调。就您的回调而言,它不知道string -> xml
转换过程。
这是现有的implementation。
这个最理想的界面与jQuery是,
$.ajax({
url: 'http://example.com/resource?type=xml',
dataType: 'xmlp',
success: function(xml) { .. }
});
但由于乱搞和重写jQuery.ajax
是有问题的,你可以这样写一个单独的命名空间中的插件本身,这将使用getScript
下方。
$.myNamespace.ajax({
..
});
为此,您需要控制服务器。服务器必须知道请求了XML,并用包含XML字符串作为参数的函数调用进行响应。假设您发送到远程服务器回调名foo
,则服务器将与一些模棱两可的话:
foo("<names><name>..</name></names>")
我想,如果你使用的是支持的E4X浏览器,那么就没有必要将XML包装在一个字符串中。该服务器可以简单地返回XML作为参数传递给回调函数:
foo(
<names>
<name>John Doe</name>
</names>
)
但不幸的是,E4X没有广泛被支持。
如果将'dataType'设置为'jsonp xml',jQuery确实支持xmlp。根据文档:“从jQuery 1.5开始,jQuery可以将ContentType类型头文件中的数据类型转换为您需要的数据类型,例如,如果您希望将文本响应视为XML,请使用”text xml“你也可以创建一个JSONP请求,将它作为文本接收,并由jQuery解释为XML:“jsonp text xml”。类似地,诸如“jsonp xml”之类的简写字符串将首先尝试从jsonp转换为xml,并且,如果没有,请从jsonp转换为文本,然后再从文本转换为xml。“ – 2011-12-29 21:26:09
@ greg.kindel - 感谢您的信息。我会**尝试**来更新答案,但我现在感觉有点懒。 – Anurag 2011-12-29 23:03:53
您可以在/* comment */
里面用Javascript函数编写XML,并使用函数函数名将此函数转换为文本。toString()和解析“/*
”和“*/
”之间的文本与JSONP的回调函数,适用于所有旧浏览器。示例xml_via_jsonp.js:
function myfunc()
{/*
<xml>
<div class="container">
<div class="panel panel-info col-lg-10 col-lg-offset-1 added-panel">
<div class="panel-heading">Random1 - Random2</div>
<div class="panel-body">
<div>Random3</div>
</div>
</div>
</div>
</xml>
*/}
function callback(func)
{
var myhtml = func.toString();
var htmlstart = myhtml.indexOf('/*');
var htmlend = myhtml.lastIndexOf('*/');
return myhtml.substr(htmlstart+2, htmlend-htmlstart-2);
}
- 1. 返回XML时的JSONP数据类型
- 2. JSONP - 返回HTML
- 3. 如何使用jquery处理从jsonp返回的xml?
- 4. NodeJS返回JSONP不使用快递
- 5. 使用.getJSON的JSONP返回undefined
- 6. 的WebAPI - 数据返回的XML时,我要求它作为JSONP
- 7. 从Jersey返回JSONP
- 8. jsonp返回号码
- 9. ASP.net MVC返回JSONP
- 10. 使用jsonp时,Ajax总是返回错误
- 11. 当返回NULL时,WCF JSONP返回空白/空文档
- 12. 使用jquery jsonp返回错误回调函数没有调用
- 13. PhoneGap jQuery JSONP返回错误
- 14. 返回JSONP的服务
- 15. jQuery + JSONP返回空数据?
- 16. 泽西webservice不返回jsonp
- 17. Elasticsearch不会返回jsonp
- 18. angularjs - HTTPpromise当JSONP返回
- 19. WebService返回JSONP响应
- 20. JSONP没有返回https
- 21. 用jsonp api返回json对象调用
- 22. PHP使用stream_context_create()返回XML
- 23. 用JSONP读取XML
- 24. 用AngularJS从NodeJS服务器返回JSONP
- 25. 使用JSONP创建回调
- 26. 使用AJAX调用从Symfony2控制器返回JSONP
- 27. 使用CLASSIC ASP将数据返回给jsonp调用
- 28. 是否可以使用从jsonp调用返回的“坏”数据?
- 29. JSONP在回调中返回一个点返回错误
- 30. 使用jsonp得到xml跨域
感谢您的帮助!如果我想使用JSONP将数据发布到API _without_,那么我可以将数据发布到API,而不必担心奇怪的跨域问题是否正确?感谢您的帮助,我是一个PHP的家伙和Javascript/jQuery对我来说还是很新的! 基本上我试图写一个小部件放在其他网站,所以我只限于Javascript,并且不能使用任何服务器端。再次感谢! – patricksweeney 2010-08-08 18:40:14
@patricksweeney - 您可以发布是,但是您不会收到回复,它是*服务器的响应*,而不是POST * *您的浏览器阻止的服务器...... POST响应的内容会是空的,这就是每个主流浏览器中同源安全的原理。 – 2010-08-08 18:41:38
所以基本上我应该看看我们是否可以用JSONP封装服务器响应或使用代理,对吧? – patricksweeney 2010-08-08 18:42:45