有没有人以前弄清楚如何发送一个(JQuery插件)对象作用域的方法作为一个谷歌API回调?例如PageSpeed API
所有的示例都向您展示了发送全局函数的名称,但我想以某种方式发送特定的实例方法(或重新查找JQuery对象的方法)。
这是基于他们的样本:
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
var query = [
'url=' + url,
'callback=runCallbacks',
'key=' + settings.api_key,
].join('&');
s.src = API_URL + query;
document.head.insertBefore(s, null);
所以我想实现的是这样的调用:
$('div.jq-google-plugin).MyGooglePlugin('callback',result);
我正在设置调用谷歌从我的插件的init方法。
。我尝试了这个-但是这产生了一个400坏请求从谷歌API。
var query = [
'url=' + url,
'callback='+ encodeURI('function(result){$('div.jq-google-plugin').MyGooglePlugin('callback',result);}’,
'key=' + settings.api_key,
].join('&');
我真的不想要做的是创建一些名称混乱的全局只是为了捕捉每个插件实例的响应,但我认为这是唯一的方法?(顺便说一句,这是有效的)
var query = [
'url=' + url,
'callback=myUniqueGlobalCallback',
'key=' + settings.api_key,
].join('&');
myUniqueGlobalCallback = function(result){$('div.jq-google-plugin).MyGooglePlugin('callback',result);}
提前感谢任何见解!我猜解决方案可能不是谷歌api特定的,但可能是围绕为什么它拒绝除了全局函数名以外的任何东西。
jQuery对JSONP有很好的支持。您应该使用它,而不是自己注入脚本元素。这样,你甚至不需要关心回调,响应将自动路由到你的success
回调。
jQuery.fn.MyGooglePlugin = function() {
$.ajax('<url>', {
dataType: 'jsonp',
data: {
key: 'api-key'
}
success: function(response) {
console.log(response);
}
});
};
我真的不想要做的是创建一些名称混乱的全局只是为了捕捉每个插件实例的响应,但我认为这是唯一的方法?
这是唯一的方法。这里的问题是,您正在做的是一个JSONP调用。这意味着您实际上没有调用任何javascript。您正在向页面动态添加一个新的脚本元素。这个script元素会立即加载url中的javascript脚本看起来像这样:
yourCallback({data: "Some Data"});
因为不管你的callback是什么必须是一个字符串,你不能传入一个对象。有库支持您尝试做的事情,但在幕后,这就是它的工作方式,因为这是唯一可以工作的方式。