我从chrome扩展内容脚本向我控制的服务器发送POST
。我在清单中设置了权限。这是我的XHR代码。 (我想避免使用jQuery)。它发送一个空的responseText
var xhr = new XMLHttpRequest();
xhr.open("POST",'http://mysite.com/make',true);
xhr.onreadystatechange=function() {
if (xhr.readyState == 4) {
var res = JSON.parse(xhr.responseText);
console.log(res);
}
}
xhr.send({'textbox':data[0].user,'from':'extension'});
data[0].user
是我直接从Twitter API获取的对象
我的CI控制器中有
$user = $this->input->get_post('textbox', TRUE);
$from = $this->input->get_post('from', TRUE);
$fullURL = 'http://www.google.com'; //example of a URL from code.
$json = $this->output->set_content_type('application/json');
$json->set_output(json_encode(array('URL' => $fullURL)));
响应文字为空
另一方面,jquery调用工作正常$.post("http://mysite.com/make", { 'textbox': data[0].user, 'from':'jquery' },
function(data) {
console.log(data);
});
答案 0 :(得分:1)
原因很简单,JQuery post方法可以接受JSON,然后将其转换为字符串并发送到服务器。
您要做的是直接在这里发送JSON:
xhr.send({'textbox':data[0].user,'from':'extension'}) // Incorrect way
发送方法应接受 NULL 或字符串,该字符串通常由QueryString参数组成,如。
xhr.send("textbox="+ data[0].user + "&from=extension"); // Correct way
这将确保您的数据通过文本框和来自的发布请求参数转到相应的网址。 将生成queryString,就像数据包正文中的 textbox = username1234& from = extension 一样,不同之处在于获取网址旁边的标题。
jQuery的post方法使您可以更简单地格式化使用JSON发送的数据,然后在内部将其转换为queryString以发送参数。 您无法使用XHR对象直接发送Javascript对象!
同时查看此示例:
http://beradrian.wordpress.com/2007/07/19/passing-post-parameters-with-ajax/