目前我正在开发一个jQuery Mobile网站,该网站稍后将通过Titanium转换为应用程序。我创建了一个RESTful JSON Web服务,它运行在与jQuery Mobile应用程序不同的服务器上。使用JSONP通过AJAX使用Web服务。
我觉得讨厌的一件事是我无法使用HTTP错误代码,因为只要服务器发出错误,jQuery就会自动中止JSONP调用。我永远无法掌握客户端的错误代码。
另一件事是JSONP只能使用HTTP动词GET,例如你不能发出JSONP POST(目前,Web服务只是GET,但可能会改变)。
JSONP还有其他选择吗?或者JSONP是我在使用AJAX远程JSON Web服务时唯一的选择?例如,Twitter应用程序如何与Twitter API交互(他们有REST API)?
答案 0 :(得分:4)
你的问题很好地解释了为什么人们抱怨jquery太容易被采用;)
JSONP不是ajax。没有成功和失败的回调。 JSONP是这样的:
random2745273
并将回调引用放入其中<script src="theurlhere"></script>
添加到head
服务器返回
random2745273({somedata});
这就是你的回调被调用的方式。
如果要报告错误,则服务器必须生成正确的代码。您不会知道发送了哪些HTTP标头。
这是您使用api进行跨域通信的唯一方法。 通过生成iframe也可以发送跨域通信,但它很笨拙且很少使用。
[编辑]
好的,这让我思考......我可以使用iframe hack来包装JSONP!
和往常一样 - 我不是第一个有这个想法的人(而且我终于谦虚地想到了我的想法;)
这是:http://beebole.com/en/blog/general/sandbox-your-cross-domain-jsonp-to-improve-mashup-security/
棒极了
[EDIT2]
啊,我忘了......还有一个。window.postMessage
它已在某些浏览器中实现。如果您不必与大多数浏览器兼容,您可以立即开始使用它! :)
答案 1 :(得分:0)
在对postMessage进行了一些研究后,我发现了一种替代JSONP的方法:使用EasyXDM通过跨域消息传递AJAX。