【问题标题】:jsonp callback errorjsonp回调错误
【发布时间】:2012-02-16 04:19:32
【问题描述】:

我正在使用 firefox 插件生成器。使用“未定义回调”运行此代码错误

function callback(data) {
   window.alert(data.status);
}

$.ajax({
   url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=210e634a0b3af972daa908a447c735c1&start_date=201112&end_date=201112&jsonp=?",
   dataType: "jsonp",
   jsonp: "jsonp",
   jsonpCallback: "callback"
});

这是 api 文档:https://www.compete.com/developer/documentation/

【问题讨论】:

    标签: javascript firefox-addon cross-domain jsonp firefox-addon-sdk


    【解决方案1】:

    实际上,为了回应 Marcelo Diniz 以及任何试图让竞争 API 正常工作的人:
    您需要将&jsonp=? 附加到您的网址,否则您的 ajax 请求将始终失败。

    我为此苦苦挣扎了一段时间,因为来自竞争的文档含糊不清。

    【讨论】:

      【解决方案2】:

      我假设您从内容脚本运行它。您必须考虑到内容脚本并不真正在与网页脚本相同的上下文中运行 - 网页无法看到内容脚本定义的功能,反之亦然 (detailed description of this mechanism)。 JSONP 通过将<script> 标签插入网页来工作。该脚本将在网页上下文中运行 - 它不会看到您在内容脚本中定义的回调函数。

      要在窗口上下文中定义 callback 函数:

      unsafeWindow.callback = function(data)
      {
        window.alert(data.status);
      };
      

      但是,您应该认真对待warnings about unsafeWindow in the documentation,并尽可能避免使用它。在您的扩展程序中使用request package 来加载数据:

      require("request").Request({
        url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=210e634a0b3af972daa908a447c735c1&start_date=201112&end_date=201112",
        onComplete: function(response)
        {
          console.log(response.json);
        }
      });
      

      然后您可以通过usual messagingresponse.json 发送到您的内容脚本。

      【讨论】:

      • 感谢 Wladimir:像往常一样,您的回答为我解决了 jsonp 问题。我正在从内容脚本进行 $.ajax jsonp 调用,并且没有触发回调。
      【解决方案3】:

      您不应该将jsonp=? 附加到您的网址,这是由 ajax 函数完成的。

      仅供参考:

      url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=<your-api-key>&start_date=201112&end_date=201112",
      

      【讨论】:

        【解决方案4】:

        试试这个。

        $.ajax({
             url: "http://apps.compete.com/sites/google.com/trended/rank/?apikey=210e634a0b3af972daa908a447c735c1&start_date=201112&end_date=201112&jsonp=?",
             dataType: "jsonp",
             success: function(data) {
                 window.alert(data.status);
            }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-30
          • 1970-01-01
          • 2012-06-30
          • 2013-09-20
          • 2014-02-05
          • 2016-04-21
          • 1970-01-01
          • 2012-07-31
          相关资源
          最近更新 更多