【问题标题】:jQuery Ajax form not posting data to controller (Codeigniter)jQuery Ajax 表单未将数据发布到控制器(Codeigniter)
【发布时间】:2013-01-11 09:54:26
【问题描述】:

我有一个页面,用户可以在其中撰写有关某些网站的评论。 我需要将此数据发布到我的 Codeigniter 控制器,该控制器使用模型函数将数据插入数据库。 在我添加 jquery 之前一切正常,现在它没有发布,而且似乎根本没有进入控制器。任何解决此问题的帮助将不胜感激。谢谢。

html

<table id="revForm">
    <tr>
        <td>Site reviewed:</td>
        <td><input readonly type="text" id="site" name="profile" value="<?php echo $sitename; ?>"></td>
    </tr>
    <tr>
        <td>Name:</td>
        <td> <input type="text" id="name" name="name" value="Enter name"> </td>            
    </tr>
    <tr>
        <td>Message:</td>
        <td><textarea row="6" column="40" id="message" name="message" value="message"></textarea></td>
    </tr>
    <tr>
        <td>Rate this site</td> 
        <td>
            <div>                        
                <input name="rating" type="radio" value="1" class="star"/>
                <input name="rating" type="radio" value="2" class="star"/>
                <input name="rating" type="radio" value="3" class="star"/>
                <input name="rating" type="radio" value="4" class="star"/>
                <input name="rating" type="radio" value="5" class="star"/>                    
            </div>

        </td>
    </tr>
</table><br>
<button id="submitReview2">Submit</button><br/>

控制器“评论”

public function addReview() { 

    $this->load->helper('form');         
    if ($this->input->post("message")!="")  {
            $this->reviewsMod->addReview($this->input->post('profile'),
                                    $this->input->post('name'),
                                    $this->input->post('message'),
                                    date('d/m/Y'),
                                    $this->input->post('rating'));
            $data['sitename'] = $this->input->post('profile');
            $this->load->view('shared/header');
            $this->load->view('profile', $data );
            $this->load->view('shared/footer');                            
        }

        else {
            $this->load->view('shared/header', $session);
            $this->load->view('profile', $data);
            $this->load->view('shared/footer'); 
            }      
    }

jQuery

$('#submitReview2').click(function() {
    var profile = $('#site').val();
    var name = $('#name').val();
    var message = $('#msg').val();
    var rating = $('#rating').val();

    var msgData = {
       'profile':profile,
       'name':name,
       'message':message,
       'rating':rating
    }
   var base_url = '<?php echo base_url(); ?>';
   $.ajax ({
       type: 'POST',
       url: base_url+'reviews/addReview',
       data:  msgData,
       success:
           function(){                   
                $('#revForm').html("<div id='success'></div>")
                $('#success').html("Your review has been submitted")
                .fadeIn(1500);
           }

  });
  return false;

模型函数

public function addReview($profile, $name, $message, $stamp, $rating) {
   $this->setValues($profile, $name, $message, $stamp, $rating);
   $this->db->insert('messages', $this);

}

【问题讨论】:

  • 在控制器中打印发布的数组[print_r($_POST)],在firebug中检查
  • 谢谢,终于学会了使用 firebug 正常工作...发现我在 jquery 中引用了错误的“消息”ID。我在那里使用了“msg”,而不是 html 中的“message”。愚蠢的错误:) 谢谢

标签: jquery ajax codeigniter post


【解决方案1】:

您是否为 base_url() 函数加载了 url 帮助程序?

$this-&gt;load-&gt;helper('url');

还可以使用 chrome 并使用 developertools 检查“控制台”和“网络”。

【讨论】:

  • 我在控制器中加载了它,我应该在其他地方做吗?无论如何,如果我输入完整的网址,它也不起作用......
【解决方案2】:

我认为JQuery 的帖子不能这样工作。 您需要使用 Jquery .submit() 或 .post() 方法。

请找到Jquery post()和submit()的例子和解释

1.Jquery submit 2.Jquery post

【讨论】:

  • .submit 需要一个提交按钮,而我没有,因为这不是表单。我知道在使用 ajax 时我应该使用常规的
【解决方案3】:

首先为你的 ajax 请求指定 error 句柄,这样你就可以看到错误发生后发生了什么:

$.ajax({
        //
        // Other parameters
        //
        success: function (result, textStatus, jqXHR) {
            // Some code
        },
        error: function (jqXHR, textStatus, errorThrown) {
           // Some code to debbug e.g.:               
           console.log(jqXHR);
           console.log(textStatus);
           console.log(errorThrown);
        }
    });

也开始使用某种 javascript 调试工具(取决于您使用的浏览器),就像有人说的 chrome 开发人员工具(在网站上时按 f12 并转到网络选项卡)在 Chrome 中或在 Firefox 中的 Firebug 甚至更复杂的桌面应用程序,例如 Fiddler

如果您在发布数据时仍有问题,请向我们提供有关您遇到的错误的更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 2011-07-28
    • 1970-01-01
    • 2016-04-20
    • 2015-01-31
    • 1970-01-01
    相关资源
    最近更新 更多