我正在使用 AJAX、jQuery 和 Phonegap 创建一个 iOS/Droid 应用程序。后端是一个 Drupal 7 站点,通过 Web 服务提供内容。不过,我对 JSONP 回调的必要性有点困惑。
我的理解是需要 JSONP 才能允许跨域请求。在某种程度上,它的工作原理是将 JSON 数据包装在回调函数中,从而使其成为一个对象。
但是,我发现我可以在没有回调的情况下发送 JSONP 请求,并通过 jQuery 解析数据而无需回调函数。因此 JSONP 数据看起来与 JSON 数据完全相同。
我错过了什么吗?如果以函数形式提供数据是 JSONP 的好处之一,那么在流程的某个阶段难道不应该需要它吗?我是否通过不发送回调参数来绕过某种程度的安全性?
谢谢!
仅供引用,这是 jQuery AJAX 代码:
$.ajax({
type: 'GET',
cache: false,
url: 'http://www.example.com/mobile/menu/devel-gosto.jsonp',
dataType: 'jsonp',
timeout: menuLoadTimeout,
success: function (data) {
menu = populateSlider(data.tree, 0);
}
});
因此,我将 dataType 设置为“jsonp”,调用返回 JSONP 数据的 Web 服务,但将回调保留在 URL 之外。 Web 服务无需回调包装器即可响应。一切正常。
最佳答案
如果没有回调,JSONP 调用将无法工作。数据加载在script
标签中,如果代码不是方法调用的形式,结果只是一个被丢弃的对象,并且成功
回调方法永远不会被调用。
ajax
方法会向 URL 添加回调参数,即使您没有指定回调参数也是如此。
在文档中,在 dataType
设置的 “jsonp”
值下:
"Adds an extra "?callback=?" to the end of your URL to specify the callback."
关于jquery - JSONP:是否需要回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812440/