【问题标题】:Sending data over chrome extension to REST通过 chrome 扩展向 REST 发送数据
【发布时间】:2016-01-26 22:29:22
【问题描述】:

我正在尝试使用 post 将我的选择发送到服务器,并且服务器需要 REST,使用 Advanced Rest Client 测试了我的数据并且一切正常,但是当我从我的 chrome 扩展程序中尝试时,我收到了未定义的错误。这是我正在尝试的方法

chrome.runtime.sendMessage({
            method: 'POST',
            action: 'REST',
            headers: {'Remote-User':'myuser'},
            url: 'http://myserver/data/add/',
            data: {'content': 'the paste content'}
        }, function(responseText) {
            alert(responseText);
        });

非常感谢任何帮助,谢谢

更新

基于 sdc,我像这样更改了我的代码,但 responseText 仍然未定义:(

function genericOnClick(info, tab) 
{
    var url = 'http://mysite/data/add/';
    var data = $.toJSON({'content': 'the paste content'});
    $.ajax({
      headers: {
        'Remote-User':'username',
        'Content-Type':'application/json;charset=utf-8'
      },
      url: url,
      data: data,
      method: 'POST',
      dataType: 'json',
      error:  function(xhr, status, error){
        alert(xhr.responseText);
      },
      success: function(data){
        console.log('succes: '+data);
      }

    });
}

【问题讨论】:

  • 你能发布你的例外吗
  • 我没有看到任何异常,只是“未定义”
  • 您是否在任何地方触发了您的genericOnClick 方法?
  • 我是个白痴,我没有在清单上添加权限..但是现在一切正常,非常感谢 sdc
  • 很高兴能帮上忙,抱歉我没有早点问这个问题

标签: javascript rest google-chrome google-chrome-extension


【解决方案1】:

我想你误解了chrome.runtime.sendMessage 的目的。请参阅Message Passing 文档的前两段。 sendMessage 用于“扩展程序与其content scripts 之间的通信”,它不是为发送 HTTP 请求而设计的。

内容脚本还必须“设置一个 runtime.onMessage 事件侦听器来处理消息”只有这样您才能收到来自 sendMessage 请求的有效响应

他们的例子的结果是undefined

chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
   console.log(response.farewell);
});
<- undefined

如果您尝试从 chrome 扩展程序中执行 HTTP 请求,则应使用 XHR

var data = $.toJSON({'content': 'the paste content'});

var xhr = new XMLHttpRequest();
xhr.open("POST", "http://myserver/data/add/", true);
xhr.setRequestHeader("Content-type", "application/json");
xhr.setRequestHeader("Content-length", data.length);
xhr.setRequestHeader("Connection", "close");
xhr.setRequestHeader('Remote-User', 'myuser');
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
      console.log('xhr response: '+ xhr.responseText);
  }
}
xhr.send(data);

【讨论】:

猜你喜欢
  • 2022-07-16
  • 1970-01-01
  • 2014-02-09
  • 1970-01-01
  • 2012-07-10
  • 2012-02-05
  • 2014-10-13
  • 2011-09-11
  • 2013-06-10
相关资源
最近更新 更多