为什么发布数据完全空了通过ajax发布到CodeIgniter控制器?

时间:2015-11-04 19:46:28

标签: jquery ajax codeigniter-3

我已经阅读了有关同一问题的所有SO帖子,并尝试了所有这些。显然,我仍然做错了。我可以将所有数据注销到控制器。发布数据总是完全空的,我不知道为什么。

jquery的

function onDeleteThing(myId, callback) {

    console.log(myId) // 10

    $.ajax({
        'type': 'post',
        'contentType': 'application/json',
        'cache': false,
        'data': {'id': myId},
        'url': '/my-url/delete',
        'dataType': 'json',
        'timeout': 50000
    }).done(function (response) {
        callback(response);
    }).fail(function (error) {
        // Total fail.
    });
}

控制器

public function delete()
{
    if ($this->input->is_ajax_request()) {
        error_log(print_r($this->input->post(), true)); // returns: Array()
        // even using $_POST returns empty array

        // here is an example of how I plan to send the post data to my model          
        if ($this->My_model->delete($this->input->post('data')) {
            echo json_encode(array('status' => 'success'));
        } else {
            echo json_encode(array('status' => 'fail'));
        }
    }
}

但是,我遇到的问题是当$this->input->post('data')到达我的控制器时它是空的。

修改

我也可以在网络标签中看到:

Request Payload
id=10

1 个答案:

答案 0 :(得分:0)

问题是您向服务器发送了相互矛盾的信息:

ContentType: "application/json"
RequestBody: "id=10" // Not JSON

如果您不需要发送json,一个解决方案就是从$.ajax调用中删除contentType选项,因为默认情况下jQuery会将其设置为application/x-www-form-urlencoded; charset=UTF-8。 / p>

如果您确实希望发送JSON,那么您必须自己将其转换为JSON,因为jQuery无法执行此操作。一种解决方案是使用JSON.stringify(如果需要IE7或更低版​​本的支持,则添加必要的polyfill)。

$.ajax({
    'type': 'post',
    'contentType': 'application/json',
    'cache': false,
    'data': JSON.stringify({'id': myId}),
    'url': '/my-url/delete',
    'dataType': 'json',
    'timeout': 50000
})