jsonp中的错误只能从firefox-extension调用

时间:2011-11-01 22:19:05

标签: ajax jquery firefox-addon jsonp

我的错误有点奇怪,它只发生在我在此帖子底部链接的firefox扩展中。我无法在任何其他设置中重现此错误。

我有这个ajax请求

$.ajax({
  type: "GET",
  dataType: "jsonp",
  url: url,
  jsonpCallback: "JSONCallback",
  data: {title:$("#txtTitle").val(), url:taburl},
  success: function(data, textStatus) {
    if(data.code > 0)
        {
        $("#icon").removeClass().addClass('accept');
        }
    else
        {
        $("#icon").removeClass().addClass('error');
        if(data.code == '-1')
            alert('kunne ikke finde din ønskeseddel på e-ønsker.dk - besøg e-ønsker.dk, og prøv derefter igen');
        }
  },
  error: function(xhr, textStatus, errorThrown) {
     alert("XMLHttpRequest="+xhr.responseText+"\ntextStatus="+textStatus+"\nerrorThrown="+errorThrown);
    $("#icon").removeClass().addClass('error');
  }
});

服务器返回

JSONCallback({"code":405});
标头为application/json

那么为什么我得到一个parseError,说没有调用JSONCallback?我认为jQuery应该为我处理这个问题?

代码来自http://builder.addons.mozilla.org/addon/1022928/latest,相关文件为data/panel.js

3 个答案:

答案 0 :(得分:2)

问题在于window。解决这个问题的最简单方法是编辑jQuery代码(我知道,我也讨厌这样做)使用unsafeWindow而不是window

答案 1 :(得分:1)

您是否尝试启用“跨源资源共享”

使用: jQuery.support.cors = true;

前一段时间我和firefox有同样的问题,在使用我的ajax调用之前使用该行修复了它。

我会因某种原因让你的失败工作:)祝你好运

答案 2 :(得分:0)

这不是一个真正的答案,但你为什么使用jsonp?在Firefox扩展的上下文中运行的代码不受跨源限制。

我对jsonp的理解是使用服务器的响应将脚本标记添加到文档中,以便执行回调。在Firefox扩展中,“文档”是XUL UI而不是常规页面的文档。我不确定向XUL添加脚本元素会导致浏览器执行该脚本。

希望这有帮助!