AJAX发布JSOSN数据到空 – codeigniter

我发现了很多类似的问题,但没有人与我的问题有关,但是,这是我的AJAX请求

data = JSON.stringify(data); url = base_url + "index.php/home/make_order"; //alert(url); var request = $.ajax({ url: url, type: 'POST', contentType: 'application/json', data: data }); request.done(function(response){ alert('success'); }); request.fail(function(jqXHR, textStatus, errorThrown){ alert('FAILED! ERROR: ' + errorThrown); }); 

我的问题是当它到达PHP CI控制器$ this-> input-> post(’data’)空时

更新这是我的数据:如AJAX请求之前所示:

data = {“sum”:“2.250”,“info”:[{“id”:“6”,“name”:“bla”,“price”:“1.000”}]}

请帮忙。 提前致谢。

首先,我要感谢所有回复。 实际上这是几个错误, 第一 :正如@bipen所说,数据必须作为对象而不是字符串发送。 当我尝试它时,它没有用,因为我没有把单引号放在数据周围

 $.ajax({ url: url, type: 'POST', contentType: 'application/json', data: {'data': data} }); 

第二 :正如@foxmulder所说, contentType拼写错误,应该是ContentType,所以正确的代码是:

 $.ajax({ url: url, type: 'POST', ContentType: 'application/json', data: {'data': data} }).done(function(response){ alert('success'); }).fail(function(jqXHR, textStatus, errorThrown){ alert('FAILED! ERROR: ' + errorThrown); }); 

并且只是因为有人遇到PHP提取问题,这是如何做到的:

 $data = $this->input->post('data'); $data = json_decode($data); $sum = $data->sum; $info_obj = $data->info; $item_qty = $info_obj[0]->quantity; 

将您的数据作为对象而不是字符串发送..(除非我们看到您的数据值,否则不确定您已经这样做了..如果没有那么试试)

 data = JSON.stringify(data); url = base_url + "index.php/home/make_order"; //alert(url); var request = $.ajax({ url : url, type : 'POST', contentType : 'application/json', data : {data:data} //<------here }); request.done(function(response){ alert('success'); }); request.fail(function(jqXHR, textStatus, errorThrown){ alert('FAILED! ERROR: ' + errorThrown); }); 

如果您的数据是评论,则更新

  {"sum":"2.250","info":[{"id":"6","name":"bla","price":"1.000"}]} 

然后data:data很好

  var request = $.ajax({ url : url, type : 'POST', contentType : 'application/json', data : data }); 

你需要将你的codeigniter代码更改为

  $this->input->post('sum') // = 2.250 $this->input->post('info') 

contentType应大写(ContentType)

看到这个问题

我已经扩展了CI_Input类以允许使用json。

将它放在application / core / MY_input.php中 ,你可以像往常一样使用$ this-> input-> post()

 class MY_Input extends CI_Input { public function __construct() { parent::__construct(); } public function post($index = NULL, $xss_clean = NULL){ if($xss_clean){ $json = json_decode($this->security->xss_clean($this->raw_input_stream), true); } else { $json = json_decode($this->raw_input_stream, true); } if($json){ if($index){ return $json[$index] ?? NULL; } return $json; } else { return parent::post($index, $xss_clean); } } } 

如果您使用的是PHP5.x。 更换

 return $json[$index] ?? NULL; 

 return isset($json[$index]) ? $json[$index] : NULL; 

我不熟悉CodeIgniter,但我认为你可以尝试使用全局变量$_POST

 var_dump($_POST['data']); 

如果var_dump显示数据,可能是$this->input...有问题