我理解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的人有理由不做上述事情。这是为什么?
答案 0 :(得分:0)
JSONP的常用用例并不涉及将脚本元素硬编码到页面中。它根据需要动态生成脚本元素。
通过使用函数,您可以在脚本加载时使用数据执行操作。
替代方法是插入脚本元素,然后继续轮询全局命名空间以查看变量是否已填充。
答案 1 :(得分:0)
使用"callback" function的重点是被回叫。该脚本确实异步加载, 时它会自动调用您的函数 - 就像JSONP脚本触发一个监听器一样。
当然,使用变量的方法也可以,特别是对于同步加载脚本。但是,在使用异步加载时,我们需要轮询正在设置的变量值,或者使用DOM事件来执行脚本。前者被鄙视,后者因为浏览器apis不一致而(尤其是)很复杂。
请注意,如果您想要这样做,可以通过将?callback=the_var%3D
放在URL参数中,将常用的JSONP apis与“变量样式”一起使用。