Jquery 为什么post数据通过ajax发布到CodeIgniter控制器是完全空的?
我已经阅读了所有关于同一问题的SO帖子,并且都试过了。显然,我仍有一些地方做错了。我可以将所有数据直接注销到控制器。Post数据总是完全空的,我不知道为什么 jqueryJquery 为什么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
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'
一切正常。谢谢你抽出时间!如果你把它作为答案发布,我会检查它作为解决方案。谢谢你的帮助!谢谢你的帮助!