我发现了很多类似的问题,但没有人与我的问题有关,但是,这是我的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-&gt; input-&gt; post('data')到达时为空 !! < / p>
更新 这是我的数据:如AJAX请求之前所示:
data = {“sum”:“2.250”,“info”:[{“id”:“6”,“name”:“bla”,“price”:“1.000”}}}
请帮忙。提前谢谢。
答案 0 :(得分:14)
首先,我要感谢所有回复。 实际上这是几个错误, 第一:正如@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;
答案 1 :(得分:4)
将您的数据作为对象发送而不是字符串..(不确定您已经这样做了,除非我们看到您的数据值...如果没有那么尝试它)
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
});
bt你需要将你的codeigniter代码更改为
$this->input->post('sum') // = 2.250
$this->input->post('info')
答案 2 :(得分:4)
contentType应大写(ContentType)
答案 3 :(得分:0)
我已将 CI_Input 类扩展为允许使用json。
将其放在 application / core / MY_input.php 中,您可以通常使用 $ this-&gt; input-&gt; 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;
答案 4 :(得分:-1)
我不熟悉CodeIgniter,但我认为您可以尝试使用全局变量$_POST
:
var_dump($_POST['data']);
如果var_dump显示数据,可能$this->input...
有问题