Jquery 为什么post数据通过ajax发布到CodeIgniter控制器是完全空的?

Jquery 为什么post数据通过ajax发布到CodeIgniter控制器是完全空的?,jquery,ajax,codeigniter-3,Jquery,Ajax,Codeigniter 3,我已经阅读了所有关于同一问题的SO帖子,并且都试过了。显然,我仍有一些地方做错了。我可以将所有数据直接注销到控制器。Post数据总是完全空的,我不知道为什么 jquery function onDeleteThing(myId, callback) { console.log(myId) // 10 $.ajax({ 'type': 'post', 'contentType': 'application/json', 'cach

我已经阅读了所有关于同一问题的SO帖子,并且都试过了。显然,我仍有一些地方做错了。我可以将所有数据直接注销到控制器。Post数据总是完全空的,我不知道为什么

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

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

ContentType: "application/json"
RequestBody: "id=10" // Not JSON
如果您不需要发送json,一种解决方案是简单地从调用中删除
contentType
选项,因为jQuery会将其设置为
application/x-www-form-urlencoded;默认情况下,字符集=UTF-8

如果您确实希望发送JSON,那么您必须自己将其转换为JSON,因为jQuery无法这样做。一种解决方案是使用(如果您需要IE7或以下版本的支持,还可以添加必要的polyfill)


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

ContentType: "application/json"
RequestBody: "id=10" // Not JSON
如果您不需要发送json,一种解决方案是简单地从调用中删除
contentType
选项,因为jQuery会将其设置为
application/x-www-form-urlencoded;默认情况下,字符集=UTF-8

如果您确实希望发送JSON,那么您必须自己将其转换为JSON,因为jQuery无法这样做。一种解决方案是使用(如果您需要IE7或以下版本的支持,还可以添加必要的polyfill)


您的Ajax需要一个json响应,如果服务器没有使用json和有效的json进行响应,那么响应将是空的。您确定您的函数返回有效的json吗?我不知道它在哪里。你是对的,我现在还没有归还任何东西。由于某种原因,我无法访问发送给控制器的post数据。在这一点上,我没有数据要发送到模型,以将响应发送回我的控制器。在一个典型的表单上,我将使用
myform.serialize()
作为数据属性,一切正常。“在这种情况下,我不确定我要把球扔到哪里去。”斯特莱纳现在很明显。就这样。我需要将其更改为
“contentType”:“application/x-www-form-urlencoded;charset=UTF-8'
一切正常。谢谢你抽出时间!如果您将其作为答案发布,我会将其作为解决方案进行检查。您的Ajax需要一个json响应,如果服务器没有使用json和有效的json进行响应,那么响应将是空的。您确定您的函数返回有效的json吗?我不知道它在哪里。你是对的,我现在还没有归还任何东西。由于某种原因,我无法访问发送给控制器的post数据。在这一点上,我没有数据要发送到模型,以将响应发送回我的控制器。在一个典型的表单上,我将使用
myform.serialize()
作为数据属性,一切正常。“在这种情况下,我不确定我要把球扔到哪里去。”斯特莱纳现在很明显。就这样。我需要将其更改为
“contentType”:“application/x-www-form-urlencoded;charset=UTF-8'
一切正常。谢谢你抽出时间!如果你把它作为答案发布,我会检查它作为解决方案。谢谢你的帮助!谢谢你的帮助!