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