我试图在Ajax上发布一些数据以便在控制器中保存,但是每次帖子都是空的时候绝对不可能将它们放到我的控制器中。
这是我的ajax代码(简单版本,但根本不起作用):
$(document).on("click",'.ajax_test',function(){
$.ajax({
type:'POST',
url:_SITE_URL+"ajax-test",
ContentType : 'application/json',
cache:false,
data:{'test':"ok"},
success:function(msg){
alert(msg);
},
fail:function(msg){
alert("failed");
}
});
});
我的控制器:
public function test_ajax(){
if($this->input->is_ajax_request()):
echo $this->input->post("test");
endif; }
当我发送它时,链接没有问题,但我的javascript严格没有回复。我尝试了很多东西,我的配置看起来不错(现在csrf_protection为false) 它与CI 2完美配合,但由于我迁移到CI 3,这拒绝工作。那我做错了什么?或者我需要在codeigniter上检查哪种配置?
非常感谢提前
答案 0 :(得分:0)
从您的ajax选项中删除ContentType : 'application/json',
。它不是必需的,而且令人困惑。当您将ajax选项data:
设置为对象(就像您正确的那样)时,它将以控制器期望的方式发送到服务器。
另一个可能的问题是.ajax url选项。
url:_SITE_URL+"ajax-test",
如果_SITE_URL
不对,那么控制器将无法找到。导致
未找到404页面
您没有看到错误,因为您在
中使用了错误的ajax选项`fail:function(msg){`
fail
实际上是一个函数。选项和功能之间的细微差别在这里。检查下面的正确用法。
把你的ajax调用放在一起应该看起来像这样
$.ajax(
{
type: "POST",
url: "controller_name/ajax-test",
cache: false,
data: {test: "ok"},
success: function (data) {
alert(data);
},
}).fail(function () {
alert("failed");
});
请注意.fail
如何链接到$.ajax()
并且未在ajax选项集中使用。
答案 1 :(得分:0)
我使用这个AJAX请求模板:
var _data = {};
$.ajax({
type: 'POST',
url: "/mycontroller/myfunction",
data: {
insertiondata: _data
},
beforeSend: function() {
},
complete: function() {
},
success: function(_result) {
console.log(_result)
}
});
在控制器中我抓住这样的参数:
...
class Mycontroller extends MY_Controller {
public function __construct() {}
public function myfunction(){
$mydata= $_POST['insertiondata'];
....
}
...
希望这有帮助。 祝你好运,
答案 2 :(得分:0)
您错过了网址上的WNOHANG
功能使用dataType
test_ajax
确保您的文件名和类名只有首字母大写。 Codeigniter区分大小写。
文件名:Ajax_test.php
使用json_encode
$(document).on("click",'.ajax_test',function(){
var SITE_URL = "<?php echo base_url();?>";
$.ajax({
type:'POST',
url: SITE_URL + "ajax_test/test_ajax",
cache:false,
dataType: 'json',
data:{
'test':"ok"
},
success:function(msg){
alert(msg['test']);
},
error:function(msg){
alert("failed");
}
});
});