AJAX发布JSON数据到空 - codeigniter

时间:2013-11-29 11:44:24

标签: jquery ajax json 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-&gt; input-&gt; post('data')到达时为空 !! < / p>

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

  

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

请帮忙。提前谢谢。

5 个答案:

答案 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)

请参阅this question

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