我已经阅读了有关同一问题的所有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
答案 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
})