从firefox扩展调用jQuery AJAX无法正常工作

时间:2012-09-18 14:49:55

标签: jquery ajax firefox firefox-addon firefox-addon-sdk

这是我的代码:

$.ajax({
          url: 'xxx',
          success: function(data) 
          {
             if (data.trim() == '0')
             {
                //IF CODE
             } 
            else
            {
              //ELSE CODE
            }
         }
    });

此代码在我想要使用的任何地方都能正常工作,但在Firefox扩展的情况下无效。

我阅读了以下stackoverflow文章,但无济于事: Call to $.ajax from firefox extension not workingAjax In Firefox Plugin

也尝试使用xmlHTTPRequest,但结果相同。

3 个答案:

答案 0 :(得分:5)

您应该使用addon sdk提供的request module。您只能在加载项脚本中调用和使用此模块,而不能在内容脚本中调用和使用此模块。

如果您需要从内容脚本执行ajax请求,请使用内容脚本和addon-script之间的通信。您可以找到文档here

如果你愿意,我有一个example of code(我认为它很难阅读),但它可以帮助你。

答案 1 :(得分:1)

为了防止未来的其他人,我想为ajax Request分享一个简单的包装器。在大多数情况下,可以将相同的jQuery Ajax配置传递给函数。 (但这不是一个完整的转换)。

function sendAjax(ajaxConfig) {
  var request = Request({
    url: ajaxConfig.url,
    contentType: ajaxConfig.contentType,
    content: ajaxConfig.data,
    headers: ajaxConfig.headers,
    onComplete: function(response){
      var data = response.json;
      if(!data)
        data = response.text;

      //console.log("Ajax complete", response.status, ajaxConfig.url, response.text);    
      if(ajaxConfig.complete){
        ajaxConfig.complete(data);

      }

      if(response.status >= 400){ //got error
        if(ajaxConfig.error){
          //console.log("Ajax error", response.status, ajaxConfig.url, response.text);
          ajaxConfig.error(data);
        }
      }
      else{ //success
        if(ajaxConfig.success){
          //console.log("Ajax success", ajaxConfig.url, response.text);
          ajaxConfig.success(data);
        }
      }

    }

  });

  switch(ajaxConfig.type){
    case "POST":
      request.post();
      break;
    case "PUT":
      request.put();
    case "DELETE":
      request.delete();
    default:
      request.get();
  }

}

答案 2 :(得分:0)

在manifest.json中,您应该将url添加到权限中: 例如:

"permissions": [
    "tabs",
    "webRequest",
    "webRequestBlocking",
    "activeTab",
    "*://xxx/*"
],