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 */ }()';
有几个问题:
您正在创建一个全局 a
变量。调用您的服务的页面应该对此负责,因此除非您将 a
设为可配置,否则这是个问题。
函数中的代码必须神奇地知道它应该对数据做什么。这与 JSONP 的观点相反,后者只是为了让服务器 return 数据并让客户端决定如何处理它。
这两个原因是标准 JSONP 请求允许调用者指定回调名称的原因(通常带有 callback
参数,但名称各不相同)
http://example.com/path/to/service?callback=foo
...标准的 JSONP 响应如下所示:
foo({/*...JSON here...*/});
这样,调用者定义函数,它知道如何处理您传递给它的数据。
因此,我被要求创建某种 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 */ }()';
有几个问题:
您正在创建一个全局
a
变量。调用您的服务的页面应该对此负责,因此除非您将a
设为可配置,否则这是个问题。函数中的代码必须神奇地知道它应该对数据做什么。这与 JSONP 的观点相反,后者只是为了让服务器 return 数据并让客户端决定如何处理它。
这两个原因是标准 JSONP 请求允许调用者指定回调名称的原因(通常带有 callback
参数,但名称各不相同)
http://example.com/path/to/service?callback=foo
...标准的 JSONP 响应如下所示:
foo({/*...JSON here...*/});
这样,调用者定义函数,它知道如何处理您传递给它的数据。