Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery AJAX未与Codeigniter控制器匹配_Jquery_Ajax_Codeigniter - Fatal编程技术网

Jquery AJAX未与Codeigniter控制器匹配

Jquery AJAX未与Codeigniter控制器匹配,jquery,ajax,codeigniter,Jquery,Ajax,Codeigniter,我正在学习AJAX,并从NETTUTS Codeigniter那里从无到有地借用了一个脚本:AJAX 脚本本身可以完美地适应我的表单,但是它不会根据控制器更新数据库。Firebug说,这篇文章在AJAX脚本中运行良好。我想我的问题是,我如何以及在哪里无法启动控制器 开放式脚本的形式 echo form_open('contacts/entry', $form); Ajax脚本(在我展示的内容上面有一个验证脚本,可以很好地工作) 使用“if($this->input->post('ajax'))

我正在学习AJAX,并从NETTUTS Codeigniter那里从无到有地借用了一个脚本:AJAX 脚本本身可以完美地适应我的表单,但是它不会根据控制器更新数据库。Firebug说,这篇文章在AJAX脚本中运行良好。我想我的问题是,我如何以及在哪里无法启动控制器

开放式脚本的形式

echo form_open('contacts/entry', $form);
Ajax脚本(在我展示的内容上面有一个验证脚本,可以很好地工作)


使用“if($this->input->post('ajax'))”是启动控制器的正确方法吗?如果没有jquery,表单本身就可以正常工作,并运行控制器。所以我知道这两个单独的部分工作,他们只是没有啮合。谢谢

您发布的是字符串
'form\u data'
而不是变量
form\u data
,请删除form\u data周围的引号,然后重试

$.ajax({
    url: "<?php echo site_url('contacts/entry'); ?>",
    type: 'POST',
    data: form_data,    // <-- previously you had data: 'form_data', which would pass the string 'form_data', not the variable.
    success: function() {
        $('#status').text('Update successful!'); 
    }
});
jQuery/AJAX

...
success: function(data) {
    if(data) {
        //alert success
    }
    else {
        //alert failure
    }
}

首先,我将删除
var form_data{ajax:'1'}
,并使用如下内容:

if($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest')
{
    // This is AJAX
}
else {
    // This is standard HTTP
}
protected function is_ajax() {
    return ($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest') ? TRUE : FALSE;
}
处理此问题的一个好方法是使用MY_控制器。如果使用它,请添加如下函数:

if($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest')
{
    // This is AJAX
}
else {
    // This is standard HTTP
}
protected function is_ajax() {
    return ($this->input->server('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest') ? TRUE : FALSE;
}
您可以使用:

if($this->is_ajax())
{
    // This is AJAX
}
else {
    // This is HTTP
}
然后,您必须回显结果以将其传递到实际视图并处理操作。像这样:

if ($this->form_validation->run() == TRUE)
{
    // Tip: you've to do the data management on MODELS
    $action = $this->db->insert('contacts', $data);

    // With this method you can handle AJAX and HTTP on the same
    // validation. If is AJAX you print, if not you redirect.
    if($this->is_ajax())
        echo $action;
    else {
        // if worked, redirect the user to the success 
        // else send it to the form error
        if($action)
            redirect("form_success");
        else
            redirect("form_error");
    }
else {
    if($this->is_ajax())
        echo false;
    else {
        $this->load->view("error_form");
    }
}
您必须更正jQuery代码以处理该操作:

$.ajax({
    url: "<?php echo site_url('contacts/entry'); ?>",
    type: 'POST',
    data: form_data, // Like said jondavidjohn
    success: function(data) {
        if(data)
        {
            $('#status').text('Update successful!');
        } else {
            $('#status').text('Operation failed!');
        } 
    }
});
$.ajax({
url:“”,
键入:“POST”,
数据:form_data,就像jondavidjohn说的那样
成功:功能(数据){
如果(数据)
{
$('状态').text('更新成功!');
}否则{
$('#status').text('操作失败!');
} 
}
});

我只是添加了引号,它与引号或之前的引号不起作用。这是一个个人联系人列表,我在表单的正下方有数据库输出。没有jquery,insert可以正常工作。我还回顾了phpmyadmin中的数据库。但我会试试你的建议。我确实收到了“更新成功!”的指示,你是说删除了引号?我会更新我的答案,告诉你ajax调用应该是什么样子。它仍然告诉我调用成功了,只是我没有启动控制器来执行它应该做的插入。它实际上告诉你关于控制器的什么?在控制器中插入之前,请打印r($data);它应该准确地打印出$data中包含的内容,以便您知道信息是否正确传递。向我们显示准确的错误。如果没有它们,我们就看不到发生了什么。是的,所以基本上我建议的所有内容+检查XMLHttpRequest。检查(data==true)是否冗余,默认情况下它会检查它是否为真。@jondavidjohn:谢谢!我编辑它!:)我还添加了一些用于在同一函数中处理ajax和http的工具。当升级到CI 2.0时,可以使用$this->input->is_ajax_request();
$.ajax({
    url: "<?php echo site_url('contacts/entry'); ?>",
    type: 'POST',
    data: form_data, // Like said jondavidjohn
    success: function(data) {
        if(data)
        {
            $('#status').text('Update successful!');
        } else {
            $('#status').text('Operation failed!');
        } 
    }
});