为什么使用JSONP和回调而不是调用者定义的变量名?

时间:2014-07-29 21:24:13

标签: javascript json jsonp

我理解jsonp背后的想法,我确信有理由不做以下但我很好奇这是什么。

为什么(由于安全性,易用性等)不能创建如下的API?

http://www.something.com/json/?caller_var_name=the_var

返回包含以下内容的JavaScript:

the_var = {"my": "json", "content": 1};

在客户端上,代码如下所示:

<script>
var the_var;
</script>
<script src="http://www.something.com/json?varname=the_var"></script>
// the_var now contains the requested JSON data

这看起来很简单,我已经测试了跨域,但如上所述,我确信那些想到JSONP的人有理由不做上述事情。这是为什么?

2 个答案:

答案 0 :(得分:0)

JSONP的常用用例并不涉及将脚本元素硬编码到页面中。它根据需要动态生成脚本元素。

通过使用函数,您可以在脚本加载时使用数据执行操作。

替代方法是插入脚本元素,然后继续轮询全局命名空间以查看变量是否已填充。

答案 1 :(得分:0)

使用"callback" function的重点是被回叫。该脚本确实异步加载, 时它会自动调用您的函数 - 就像JSONP脚本触发一个监听器一样。

当然,使用变量的方法也可以,特别是对于同步加载脚本。但是,在使用异步加载时,我们需要轮询正在设置的变量值,或者使用DOM事件来执行脚本。前者被鄙视,后者因为浏览器apis不一致而(尤其是)很复杂。

请注意,如果您想要这样做,可以通过将?callback=the_var%3D放在URL参数中,将常用的JSONP apis与“变量样式”一起使用。