Chrome扩展程序中的XHR与CI

时间:2012-05-07 06:55:16

标签: javascript codeigniter google-chrome google-chrome-extension xmlhttprequest

我从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);
});

1 个答案:

答案 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/