jquery - JSONP:是否需要回调?

标签 jquery json web-services jsonp

我正在使用 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."

http://api.jquery.com/jQuery.ajax/

关于jquery - JSONP:是否需要回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812440/

相关文章:

javascript - Node.js 代码未在 javascript 函数中运行

android - 将下载的 JSON 数据缓存到 SQLite 数据库——这是个好主意吗?

C# 在 JSON 对象中序列化 JSON 对象

web-services - 贾克斯WS : Externalize Http Conduit name Attribute

database - 如何知道 WCF DataContract 代表持久实体还是 transient 实体?

javascript - 航点和无限滚动

javascript - 单击时如何使按钮(输入类型 ="submit")消失

javascript - 单击页面上的任意位置时切换 div 内容

javascript - JSON 到 CSV : How to create a table column for all fields in a collection when using Papa. 解解析()?

c# - WCF webservice - 使用锁会导致问题吗?