无法在Codeigniter端访问Ajax POST变量

时间:2015-01-12 20:50:26

标签: javascript php jquery ajax codeigniter

我使用jquery进行ajax调用。基本上我不知道如何访问我通过发布请求发送到服务器的数据。我不知道变量被称为什么或......某事。我不知道!

Ajax功能:

function ajax_client(url, json) {

    return $.ajax({
        url: url,
        type: 'POST',
        data: json,
        dataType: 'json'
    });
}

function gather_records(data, inp_col, fetch_col, limit) {

    var json = JSON.stringify({
        "ids"        : data,
        "inp_col"    : inp_col,
        "fetch_col"  : fetch_col,
        "limit"      : limit
    });

    return ajax_client(base_url+'ajax_port/gather_records', json);
}

Codeigniter功能:

public function gather_records() 
{

    $data      = json_decode($this->input->post('ids'));

    log_message('debug', $data);//null

    return json_encode($data);//null :(
}

我在这里从服务器接收数据没有问题(并使用jQuery访问),我的问题是我无法获取我发送 codeigniter。如果有任何不同,我会在MAMP上发展。

我尝试过其他变量名称,

$this->input->post('data');
$this->input->post('json');

似乎无效。 非常感谢我能得到任何帮助!

1 个答案:

答案 0 :(得分:1)

您不需要JSON.stringify({..

只是传递一个物体,一切都会好的。我的意思是:

function ajax_client(url, json) {

    return $.ajax({
        url: url,
        type: 'POST',
        data: json,
        dataType: 'json'
    });
}

function gather_records(data, inp_col, fetch_col, limit) {

    var json = {
        "ids"        : data,
        "inp_col"    : inp_col,
        "fetch_col"  : fetch_col,
        "limit"      : limit
    };

    return ajax_client(base_url+'ajax_port/gather_records', json);
}

还有一件事。您不需要在PHP端json_decode使用它。因为jQuery中的默认contentType是'application/x-www-form-urlencoded; charset=UTF-8'

更改行

$data      = json_decode($this->input->post('ids'));

$data      = $this->input->post('ids');

但如果您真的想发送JSON,可以添加contentType

    return $.ajax({
        url: url,
        type: 'POST',
        data: json,
        contentType: 'application/json',
        dataType: 'json'
    });
您设置的

dataType是"您期望从服务器返回的数据类型。" (http://api.jquery.com/jquery.ajax/