JSONP 的 getJSON 回调有啥意义?
Posted
技术标签:
【中文标题】JSONP 的 getJSON 回调有啥意义?【英文标题】:What's the point of getJSON callback for JSONP?JSONP 的 getJSON 回调有什么意义? 【发布时间】:2012-12-12 19:50:07 【问题描述】:我只是想知道如果我使用 JSONP,在 jQuery 的 getJSON 函数中是否有一个回调函数成功。
来自文档:
http://api.jquery.com/jQuery.getJSON/
jQuery.getJSON( url [, data] [, success(data, textStatus, jqXHR)] )
“成功”函数在 JSON 响应成功后触发。
但是,如果我们在函数回调在 JSONP 响应中的情况下使用 JSONP,是否需要“成功”函数?
我猜不是,但我在页面上找不到任何信息来确认它。如果有理由使用“成功”功能,我只是不想忽略某种安全问题。
谢谢!
【问题讨论】:
【参考方案1】:jQuery 自动在全局窗口对象上设置自己的回调函数(使用自动生成的名称)并替换“?”在“回调=?”与函数的名称。那个回调函数调用你的。
这意味着您可以只将一个匿名函数传递给 jQuery,而不必确保您不会两次使用相同的函数名称,就像使用 jQuery 的普通 AJAX 请求一样。
来自jQuery.ajax() documentation的相关引用:
最好让 jQuery 生成一个唯一的名称,因为这样可以更轻松地管理请求并提供回调和错误处理。当您想要更好地为 GET 请求启用浏览器缓存时,您可能需要指定回调。
【讨论】:
我读到了,但没有完全理解它想要表达的意思。而且我不确定这个注释是否适用于 JSONP 的 getJSON。我会尝试使用您添加的信息重新阅读它,看看是否有点击。 我想我还是不明白。 getJSON 等价于 $.ajax( url: url, dataType: 'json', data: data, success: callback );但是 JSONP 响应会自动调用响应中指定的函数。所以我仍然没有看到“成功:回调”函数的使用。但是在测试了一些之后,它可能会被忽略。 我终于明白你和文档的意思了。 jQuery 替换了“回调=?”使用“callback=blah”之类的东西,因此您可以使用匿名函数。所以最后只有一个回调/成功函数。谢谢!【参考方案2】:当然你不必使用成功回调,但我能想到一个很好的使用方法——单一职责。
通过 JSONP url 传递的回调函数应该只处理解析 JSON 和动态更改页面,而 jQuery 的成功回调可用于执行与请求本身相关的其他任务,而不是与接收到的数据相关的任务。
【讨论】:
我真的很喜欢在 2 个回调函数之间分离职责的想法,但我无法让它工作。也许 jQuery 只是忽略了成功回调? 我终于明白发生了什么。我评论了 PleaseStand 的回答。我希望我在其他一点上不会再犯错误。谢谢!以上是关于JSONP 的 getJSON 回调有啥意义?的主要内容,如果未能解决你的问题,请参考以下文章
PHP 带有jQuery getJSON(回调)的JSONP公共API(MySql)
使用 jQuery 请求 JSONP 时,我可以使用静态(即预先确定的)回调函数名称吗?
jQuery.getJSON(url, [data], [callback])