1

我从一个浏览器扩展程序内容脚本发送到POST我控制的服务器。我在清单中设置好权限。这是我的XHR代码。 (我想避免这个jQuery)。它发送一个空responseTextXHR在Chrome扩展与CI

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是一个对象,我在CI控制器直接得到了来自Twitter的API

$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

是否使用萤火/铬开发工具? 签出服务器正在发送什么响应? 并退后一步..尝试记录什么JSOn字符串是PHP生成? –

+0

我安装了[chromePHP](http://www.chromephp.com/)。将尝试调试。 – Chamilyan

+0

但在此之前刚刚尝试 xhr.post( “文本=” +数据[0]的.user + “&从扩展=”); 而不是你所做的。 我认为它应该工作。 –

回答

1

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

你所要做的就是直接送到这里JSON:

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

发送方法应该要么接受NULL字符串,它一般由查询字符串参数一样

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

这将确保您的数据转到相应的URL与文本框POST请求的参数。 和queryString将生成像textbox = username1234 & from =分机在数据包的身体不同于一个进入获取与一边的URL头。

jQuery的POST方法把它简化为你送你使用JSON,然后在内部将其转换是将queryString发送参数格式的数据。 你不能直接发送像XHR对象那样的Javascript对象!

也会检出这个例子:

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

+0

我的服务器代码不接受查询字符串。无论如何做到这一点,而不添加查询字符串的请求? – Chamilyan

+0

您的服务器代码只接受邮政参数。 CodeIgniter的$ this-> input-> get_post('textbox',TRUE)将使您从发送请求到该控制器的文本框参数。 但它确保安全和其他方面。 只要尝试添加更改我告诉你你的AJAX代码发送()。 –

+0

没有工作。它不会将变量发送到服务器脚本。我可以从服务器向XHR responseText回显一个静态字符串,并且工作。请记住,我没有启用查询字符串。我无法启用它们。 – Chamilyan