【问题标题】:jquery ajax form submit not working with codeigniter but working otherwisejquery ajax表单提交不能与codeigniter一起使用,但可以正常工作
【发布时间】:2013-02-27 17:29:21
【问题描述】:

我尝试使用没有 codeigniter 的 jquery ajax 提交表单,只是为了了解 ajax 的工作原理。它工作得很好,但现在我想在 codeigniter 中做到这一点(因为我正在 CI 中开发我的应用程序)。它不是在数据库中插入值。我不知道如何检查问题出在哪里

这是我的视图:-

<form name="article_form" method="POST" action="">
 <input type="text" name="title" placeholder="Title for your article" />
 <br>
 <textarea rows="12" name="body" placeholder="Tell your story"></textarea>
 <br>
 <input type="submit" name="submit_article" id="submit_article" value="Post" />
</form>

这是我的 jquery ajax 脚本:-

<script language='JavaScript' type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script>
    <script>
        $('#submit_article').click(function(){

            var article_title = document.getElementById("title").value;
            var article_body = document.getElementById("body").value;

            $.ajax({
                url: '<?php echo base_url()."main/submit_article";?>',
                type: 'POST',
                dataType: 'json',
                data: 'title='+article_title + '&body='+article_body,
                success: function(output_string){
                    $('#result_table').append(output_string);
                }
            });
        });
    </script>

Main 是控制器,这个函数 submit_article :-

public function submit_article()
{
        $article_title = $this->input->post('title');
        $article_body = $this->input->post('body');

    $this->load->model("model_articles");

    if($this->model_articles->article_submit($article_title, $article_body))
    {
        return true;
    }
    else
    {
        return false;
    }
}

这会加载模型 - model_articles 并将两个值,即 $article_title 和 $article_body 传递给函数 article_submit()。这是模型中必须将值插入数据库的函数:-

public function article_submit($article_title, $article_body)
    {
        $article_data = array(
            'title' => $article_title,
            'body' => $article_body
            );

        $query_insert_article = $this->db->insert('articles', $article_data);
        if($query_insert_article)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

【问题讨论】:

  • 您确定您的数据库中没有输入任何记录吗?如果您在控制器中尝试 var_dump($article_title, $article_body); 会发生什么?
  • 我得到这个 bool(false) bool(false)
  • hi, 0, 0 正在存储在数据库中。这意味着插入功能 ios 工作。我认为该值没有从视图中到达控制器。有什么办法可以检查吗?

标签: php jquery mysql ajax codeigniter


【解决方案1】:

您需要将控制器功能和 ajax 更改为 试试这个

    <script language='JavaScript' type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script>
<script>
    $('#submit_article').click(function(){

        var article_title = $('input[name="title"]').val();
       var article_body = $('textarea[name="body"]').val();


        $.ajax({
            url: '<?php echo base_url()."main/submit_article";?>/'+article_title+'/'+article_body ,
            type: 'POST',
            dataType: 'json',
            data:  $('#form_id').serialize(),/*edit form_id*/
            success: function(output_string){
                $('#result_table').append(output_string);
            }
        });
    });
</script>

这个是你的控制器

  public function submit_article($article_title,$article_body )
  {


$this->load->model("model_articles");

if($this->model_articles->article_submit($article_title, $article_body))
{
    return true;
}
else
{
    return false;
}

}

希望它会解决.....

【讨论】:

    【解决方案2】:

    你需要把你的 JavaScript 改成这样:

    $('#submit_article').click(function(e) {
    
        var article_title = $('input[name="title"]').val();
        var article_body = $('textarea[name="body"]').val();
    
        $.ajax({
            url: '<?php echo base_url(); ?>main/submit_article',
            type: 'POST',
            dataType: 'json',
            data: 'title=' + article_title + '&body=' + article_body,
            success: function(output_string) {
                $('#result_table').append(output_string);
            }
        });
    
        // Add this if you want to prevent the normal form from sending:
        e.preventDefault();
    });
    

    【讨论】:

    • 我添加了这个但没有运气,我还通过添加 id="title" 和 id="body" 对输入标签进行了更改。它不起作用。当我使用 $article_title 和 $article_body 的预分配值运行控制器时,它会将值存储在数据库中。但是当我提交带有值的表单时,什么也没有发生。我猜 veiw 和 jquery ajax 代码有问题
    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 2021-06-13
    • 2013-09-19
    • 2015-07-29
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多