我试图将数据解析到我的控制器,以便可以使用JQuery将其插入数据库,并且返回null。 它是用于评论星系统的,因此不使用常规的表单域,但是inspect元素中的network选项卡显示数据实际上只是发布到了控制器,由于某些奇怪的原因而无法读取。

更新:可以在桌面上正常插入数据,但是正确显示确认(flashdata)消息,不确定原因。 另外,在移动视图中,没有数据或消息显示。 有人知道为什么吗? 我已经更新了下面的代码。

这是我看来的代码:

    <?php  if($this->session->flashdata('review_submitted')){  ?>
    <div class="alert alert-success alert-dismissible container show" role="alert">
      <button type="button" class="close" data-dismiss="alert" aria-label="Close">
        <span aria-hidden="true">&times;</span>
      </button>
      <strong>Thank you!</strong> Your review has been submitted.
    </div>
    <?php } ?>

<form id="myForm" name="myForm">

<br>
            <div class="form-group text-left div-style">
             <h3 style="font-family: MontserratLight;letter-spacing: 2px; line-height: 32px;">Full Name <b>*</b></h3>
                <input name="name" class="form-control" style="background: #f7f7f7;  border: 1px solid #801424;" required />
            </div>

    <div class="rate">
        <div id="1" class="btn-1 rate-btn"></div>
    <div id="2" class="btn-2 rate-btn"></div>
    <div id="3" class="btn-3 rate-btn"></div>
    <div id="4" class="btn-4 rate-btn"></div>
    <div id="5" class="btn-5 rate-btn"></div>
</div>

  <script>
   $(function(){
 $('.rate-btn').hover(function(){
 $('.rate-btn').removeClass('rate-btn-hover');
    var therate = $(this).attr('id');
    for (var i = therate; i >= 0; i--) {
 $('.btn-'+i).addClass('rate-btn-hover');
     };
   });

 $('.rate-btn').click(function(){
    var therate = $(this).attr('id');
    var dataRate = 'rate='+therate; //
 $('.rate-btn').removeClass('rate-btn-active');
    for (var i = therate; i >= 0; i--) {
 $('.btn-'+i).addClass('rate-btn-active');
    };
$('#myForm').on('submit', function(e){
  var url = "<?php echo base_url(); ?>index.php/reviews/add_review";
//  $('#myForm').append(therate);
  var dataPost = $('#myForm').serialize() + "&rate=" + therate;
 $.ajax({
    type : "POST",
    url : url,
    data: dataPost,
    success:function(){

   }
  });
});
});
 });
  </script>

使用控制器,我只需使用以下命令即可获取数据并将其添加到数据库中:

   public function add_review(){

$name = $this->input->post('name');
$rating = $this->input->post('rate');


$dataDB = array(
  'full_name' => $name,
  'rating' => $rating
);

if($this->functions->submit($dataDB)){
  $this->session->set_flashdata('review_submitted', true);
  redirect(base_url() . 'reviews/index', 'refresh');
  }

 }

这是我使用的一些CSS,也许问题出在没有光标的移动浏览器上?

.rate{
    width:245px; height: 40px;
    margin-bottom:0px;
}
 .rate .rate-btn{
    width: 45px; height:40px;
   float: left;
   background: url(rate-btn.png) no-repeat;
    cursor: pointer;
    cursor:hand;
    pointer-events: auto;

   }
  .rate .rate-btn:hover, .rate  .rate-btn-hover, .rate  .rate-btn-active{
    background: url(rate-btn-hover.png) no-repeat;
   }

#1楼 票数:2

通过ajax传递数据时,我认为使用JSON dataType更好。 改革数据类型(字符串->数据对象)。 此外,我认为没有必要将“待发送”数据合并为字符串。

如果要发送动态数据,则可以按条件推送元素

$.ajax({
    type : "POST",
    dataType: 'text' //it is not necessary if you are not returning any data (if you return json, put 'JSON'),
    url : "<?php echo base_url(); ?>index.php/reviews/add_review",
    data: dataRate, //change to {key:value,key:value}
    success:function(data){

    }
});

#2楼 票数:0

这只是为了解决您的问题,因为您的AJAX发布值仅在您期望的位置不出现。

您可以使用无数种方法来编写此代码,但这只是我为了执行调试而更改的一种方法。 甚至我学到了一个新的技巧。

刚采摘尼特,但阅读你的代码是你使用的是什么的时候伸出了therate当你的JS在其他地方使用骆驼情况下,所以应该是theRate。它的选择标准,并坚持下去是个好主意。

另外,您的JS中似乎有嵌套事件。 尝试使theRate正常工作? 无论如何...

第一件事。 回到基本的东西,然后再继续工作。 (尽管在这种情况下,我并没有将您的视图重新划分为裸露的骨头,但是我还是与您的控制器一起做的。

您的看法。 我必须对此进行一些更改,希望这些注释可以解释问题。

我称它为rating_view.php

<form name="my-form" id="my-form">
    <div class="rate">
        <div id="1" class="btn-1 rate-btn">1</div>
        <div id="2" class="btn-2 rate-btn">2</div>
        <div id="3" class="btn-3 rate-btn">3</div>
        <div id="4" class="btn-4 rate-btn">4</div>
        <div id="5" class="btn-5 rate-btn">5</div>
    </div>
    <input type="submit">
</form>
<!-- Added for viewing debug response -->
<div id="json-debug-output"></div>

<!-- Some styles added as non were provided -->
<style>
    .rate-btn-hover {
        background: blue;
    }
    .rate-btn-active {
        background: yellow;
    }
</style>
<script src= <?= base_url('assets/js/jquery_v3.4.1.js'); ?>></script>

<script>
    $(document).ready(function () {
        // Define your Dom Elements ONCE for efficiency etc
        let domRateButton = $('.rate-btn');
        let domMyForm = $('#my-form');
        let theRate = 0; // Declares this as a Global Var.

        let domJsonDebugOutput = $('#json-debug-output');

        // Hover
        domRateButton.hover(function () {
            domRateButton.removeClass('rate-btn-hover');
            let theRate = $(this).attr('id');
            for (let i = theRate; i >= 0; i--) {
                $('.btn-' + i).addClass('rate-btn-hover');
            }
        });

        // Click
        domRateButton.click(function () {
            console.log('Rating Button Clicked');
            theRate = $(this).attr('id');
            domRateButton.removeClass('rate-btn-active');
            for (let i = theRate; i >= 0; i--) {
                $('.btn-' + i).addClass('rate-btn-active');
            }
        });

        // Submit
        domMyForm.on('submit', function (e) {
            e.preventDefault(); // This was missing
            console.log('Posting Rate = ' + theRate);

            $.ajax({
                type: "POST",
                // dataType: 'text',
                dataType: "json",
                url: "<?php echo base_url(); ?>reviews/add_review",
                data: {'act': 'rate', 'post_id':<?= $post_id; ?>, 'rate': theRate},

                success: function (data) {
                    let debugData = JSON.stringify(data);
                    domJsonDebugOutput.text(debugData); // Display in our Debug Div
                },
                error: function (data) {
                    let debugData = JSON.stringify(data);
                    domJsonDebugOutput.text(debugData); // Display in our Debug Div
                }
            });
        });
    });
</script>

注意在AJAX中dataTypetext更改为json 另请注意, 数据是一个数组

我也将TheRate的范围从本地更改为全局,因此它在功能中“可找到”。

不确定如何设置表单,但我添加了e.preventDefault(); 以防止表单提交测试。

就我个人而言,我渴望将PHP变量嵌入任何JS代码中,而且我通常将JS作为外部文件,并通过使用JS读取它们来传递来自PHP的值,但这也有其优点和缺点。 因此,为了不至于太过分,我就不理会它了。

对于您的控制器-称为Reviews.php

public function show() {
    $data['post_id'] = 1; // This comes from somewhere
    $content = $this->load->view('rating_view', $data, TRUE);
    echo $content;
}

/**
 * Called by AJAX
 * Do we need to test this is only called by AJAX?
 */
public function add_review() {
    // Return everything that was sent for debugging
    echo json_encode($this->input->post());
//      var_dump($this->input->post());
    exit();
}

所以在这里,我只有一个方法show()来显示表单和add_review,以简单地反弹发送的内容。 您可以用它来做各种各样的事情。 在这种情况下,一个不错的方面是您不需要使用console.log,因为您可以在页面上查看所有内容(但只能用于调试)。 这是另一种选择。

因此,尝试一下,然后开始对代码进行更改,看看有什么用。 记住-回到基础并选择不起作用的地方。

接下来,您会发现您可能无法重新定向。 但这是另一篇文章。

  ask by Hydra translate from so

未解决问题?本站智能推荐:

1回复

如何使用PHP和Ajax插入数据

我想在这个函数中向Mysql数据库添加数据,但是出现问题: 我刚刚通过 Attr 获取了数据,并希望将其发送到控制器并显示它以确保数据正确发送。 我的控制器中有 2 个回声,但没有一个显示,尽管 2 个警报在开始时显示在屏幕上。 非常感谢,如果我的英语不好,请见谅。 脚本 : 控制器 : 看法 :
2回复

无法使用ajax将数据插入数据库

我是jquery和ajax的新手,现在我很难在使用ajax和codeigniter将数据插入数据库时​​找到解决这个问题的方法。 所有错误都没问题,但是当表单上没有错误时,我收到数据库错误,所有输入都变为NULL。 调节器 Ajax 1: Ajax 2:
1回复

从NodeServer到Codeigniter中的Controller的Ajax发布调用,数据未插入数据库

可能重复: 如何从节点服务器发送http发布呼叫? 如何使用节点JS创建ajax POST? 我在上面尝试了与我的问题有关的其他链接。 但没有任何解决方案。 环境 操作系统:Windows 7-64 bit 框架:CodeIgniter PHP MVC 客
1回复

在Codeigniter中使用Ajax插入和检索数组数据

我试图在Codeigniter中使用Ajax插入和检索数组数据,我尝试了以下代码不起作用,任何人都可以告诉我解决方案。 在Controller中,但我尝试了以下代码,但未插入数据库表中
1回复

购物车数据未使用Ajax更新

我正在尝试制作Codeigniter购物车。 我在更新购物车详细信息时遇到了一些问题。 HTML /视图 这些隐藏的字段包含所有要更新的数据。 JS 控制器
2回复

如何使用带有Codeigniter的模式甜蜜警报Ajax插入数据

我在使用模式甜蜜警报插入数据时遇到麻烦,这是我的脚本: 这是我的控制器 谢谢 :)
3回复

使用codeigniter数据未插入数据库

我已经尝试过在Web上找到一个解决方案,我仍然找不到任何答案,我遵循了以下代码。,仍然我的数据没有进入数据库。, 这是我的控制器pages.php 这是我的看法pages / index.php 这是我的模型contact_model.php 这是我的js文件custom.js
2回复

如何使用没有表单的ajax和php使用复选框将数据插入数据库

选中时我有一个复选框,我想将复选框的值输入到数据库中。请帮我找到 Ajax 和 php 代码。 我试过这个 和 但它不会工作