jQuery Mobile App +远程REST Web服务:JSONP的替代方案?

时间:2011-06-15 12:33:43

标签: http rest jquery jquery-mobile jsonp

目前我正在开发一个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)?

2 个答案:

答案 0 :(得分:4)

你的问题很好地解释了为什么人们抱怨jquery太容易被采用;)

JSONP不是ajax。没有成功和失败的回调。 JSONP是这样的:

  1. 将参数放入网址
  2. add& jsoncallback = random2745273
  3. 创建一个全局变量random2745273并将回调引用放入其中
  4. <script src="theurlhere"></script>添加到head
  5. 这就是你所能做的一切。
  6. 服务器返回

    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。

请参阅http://easyxdm.net/wp/2010/03/17/cross-domain-ajax/