1

我正在将POSTchrome 扩展内容脚本发送到我控制的服务器。我在清单中设置了权限。这是我的 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);
});
4

1 回答 1

1

原因很简单,JQuery post 方法可以接受 JSON,然后将其转换为字符串并发送到服务器。

您要做的是直接在此处发送 JSON:

xhr.send({'textbox':data[0].user,'from':'extension'}) // Incorrect way

send方法应该接受NULL通常由 QueryString 参数组成的字符串,例如.

xhr.send("textbox="+ data[0].user + "&from=extension"); // Correct way

这将确保您的数据通过文本框发送到适当的 URL,并作为发布请求参数发送。 并且 queryString 将像textbox=username1234&from=extension一样在数据包的主体中生成,这与 Get 中带有 URL 旁边的标头不同。

jQuery 的 post 方法使您可以更轻松地格式化使用 JSON 发送的数据,然后在内部将其转换为 queryString 以发送参数。您不能使用 XHR 对象直接发送 Javascript 对象!

另请查看此示例:

http://beradrian.wordpress.com/2007/07/19/passing-post-parameters-with-ajax/

于 2012-05-07T07:07:14.583 回答