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...
有问题