1

以前有没有人想出如何将(JQuery 插件)对象范围的方法作为 Google 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 方法中设置对 Google 的调用。

例如,我试过这个——但这会从 Google API 产生 400 Bad Request。

 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);}

提前感谢您的任何见解!我想该解决方案可能不是特定于 Google API 的,但可能是它拒绝除全局函数名称之外的任何东西的原因。

4

2 回答 2

1

jQuery 对 JSONP 有很好的支持。您应该使用它而不是自己注入脚本元素。有了它,您甚至不需要关心回调,响应将自动路由到您的success回调。

jQuery.fn.MyGooglePlugin = function() {
    $.ajax('<url>', {
        dataType: 'jsonp',
        data: {
            key: 'api-key'
        }
        success: function(response) {
            console.log(response);
        }
    });
};
于 2011-09-20T02:43:39.227 回答
1

我真的不想做的是创建一些名称混乱的全局只是为了捕捉每个插件实例的响应,但我认为这是唯一的方法?

这是唯一的方法。这里的问题是你正在做的是一个 JSONP 调用。这意味着您实际上并没有调用任何javascript。您正在向页面动态添加新的脚本元素。该脚本元素将立即加载 url 中的 javascript,并且 javascript 看起来像这样:

yourCallback({data: "Some Data"});

因为无论 yourCallback 是什么,它都必须是一个字符串才能工作,所以你不能传入一个对象。有库支持您尝试做的事情,但在幕后,这就是它的工作方式,因为这是它可以工作的唯一方式。

于 2011-09-20T02:44:59.540 回答