javascript AJAX post JSON数据到达空

cqoc49vn  于 2023-02-02  发布在  Java
关注(0)|答案(5)|浏览(113)

这是我的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"}]}
nfzehxib

nfzehxib1#

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

$.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;
wvyml7n5

wvyml7n52#

发送你的数据作为对象而不是字符串..(不确定你已经这样做了,除非我们看到你的数据的值..如果没有,然后尝试它)

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')
qaxu7uf2

qaxu7uf23#

内容类型应大写(ContentType)
参见this question

yjghlzjz

yjghlzjz4#

我已经扩展了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;
r9f1avp5

r9f1avp55#

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

var_dump($_POST['data']);

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

相关问题