return 一个不带回调的 jsonp 调用的匿名函数

return an anonymous function to a jsonp call without a callback

因此,我被要求创建某种 Web 服务,return 一个 javascript 库(根据查询参数而变化)到 jsonp 调用。 我试着写下一些脚本来做到这一点,看起来这很可能也很容易。 现在的问题是,我读了很多关于 jsonp 的文章,但是,为什么我不应该做这样的东西呢?我可以做些什么来获得相同的结果而不是这种方式?

客户端样本在这里:

var script = document.createElement('script');
script.src = '//my_url/testjsonp.php';

document.getElementsByTagName('head')[0].appendChild(script);

此处的服务器示例:

echo 'var a = function(){ /* basically what i want here */ }()';

有几个问题:

  1. 您正在创建一个全局 a 变量。调用您的服务的页面应该对此负责,因此除非您将 a 设为可配置,否则这是个问题。

  2. 函数中的代码必须神奇地知道它应该对数据做什么。这与 JSONP 的观点相反,后者只是为了让服务器 return 数据并让客户端决定如何处理它。

这两个原因是标准 JSONP 请求允许调用者指定回调名称的原因(通常带有 callback 参数,但名称各不相同)

http://example.com/path/to/service?callback=foo

...标准的 JSONP 响应如下所示:

foo({/*...JSON here...*/});

这样,调用者定义函数,它知道如何处理您传递给它的数据。