通过chrome扩展程序将数据发送到REST

时间:2016-01-26 22:29:22

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

我正在尝试使用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);
      }

    });
}

1 个答案:

答案 0 :(得分:2)

我认为你误解了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);