http - jQuery Mobile App + 远程 REST Web 服务 : Alternatives to JSONP?

标签 http rest jquery jquery-mobile jsonp

目前我正在开发一个 jQuery Mobile 网站,该网站稍后将通过 Titanium 转换为一个应用程序。我创建了一个 RESTful JSON Web 服务,它运行在与 jQuery Mobile 应用程序不同的服务器上。 Web 服务使用 JSONP 通过 AJAX 使用。

我觉得烦人的一件事是我不能使用 HTTP 错误代码,因为只要服务器发出错误,jQuery 就会自动中止 JSONP 调用。我永远无法掌握客户端的错误代码。

另一件事是 JSONP 仅适用于 HTTP 动词 GET,例如您不能发出 JSONP POST(目前,Web 服务仅是 GET,但这可能会改变)。

有没有 JSONP 的替代品?还是在将远程 JSON Web 服务与 AJAX 结合使用时,JSONP 是我唯一的选择?例如,Twitter 应用程序如何与 Twitter API(它们具有 REST API)交互?

最佳答案

你的问题很好地说明了为什么人们提示 jquery 太容易采用;)

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

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

服务器返回

random2745273({somedata});

这就是调用回调的方式。

如果您想报告错误,那么您的服务器必须生成正确的代码。您不会知道发送了哪些 HTTP header 。

这是您可以与 api 进行跨域通信的唯一方式。 生成 iframe 也可以发送跨域通信,但它很老套而且很少使用。

[编辑]

好吧,这让我开始思考......我可以使用 iframe hack 来包装 JSONP!

和往常一样 - 我不是第一个有这个想法的人(我终于谦虚地用谷歌搜索了我的想法;))

这是:http://beebole.com/en/blog/general/sandbox-your-cross-domain-jsonp-to-improve-mashup-security/

太棒了

[编辑2]

哇哦,我忘了...还有一个。

window.postMessage

它已经在一些浏览器中实现了。如果您不必兼容大多数浏览器,您现在就可以开始使用它了! :)

关于http - jQuery Mobile App + 远程 REST Web 服务 : Alternatives to JSONP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6357730/

相关文章:

python - Azure 认知服务文本转语音 REST API 中的 requests.exceptions.ConnectTimeout 错误

javascript - 如何创建可调整大小的 div 作为搜索引擎

javascript - 我如何将这个动态 CSS 点图变成折线图?

internet-explorer - 在 IE8 中重复 http_accept ...这是一个错误吗?

rest - REST API 如何传递大型 JSON?

web-services - REST 何时/如何取代 SOAP

javascript - 如何使用 javascript/jquery 检测 document.hidden 中的更改?

http - outlook.office.com 与 outlook.office365.com

java - 为什么即使 url 工作正常,此代码也会抛出 java.io.FileNotFoundException

sockets - 在 Flutter 中监听 API 变化