0

我一直在尝试更新数据库行,而不必重新加载页面或重定向到另一个页面来提交查询。我已经尝试了我能做的任何事情,但没有运气。我有一个画廊页面。当用户提交艺术品时,默认情况下它没有被批准,并且可以由授权用户(例如版主)批准。版主页面列出了未经批准的艺术作品。数据库有一个名为approved 的列,其值为0 或1。

这是我的代码。

更新:

非常感谢您抽出宝贵时间。我做了你说的改变,但它仍然没有工作。诚然,我对 jQuery/Ajax 不是很擅长,所以我认为它为什么不起作用是我的错误。我的代码现在是这样的:

模型功能:

function approve($id)
{
    $this->db->where('id', $id);
    $this->db->update('galeri', array('approved' => '1')); 
    return TRUE;
}

控制器

function approve($id)
{
    if ($this->galeri->approve($id)) {
        echo("VALID");
    }
}

HTML

.
.
.
<script type="text/javascript">
        $(document).ready(function() {

            var test = $("a.approval").attr("id").replace('artid-','');
            $.ajax({
                  type: 'post',
                  url: 'approve',
                  data: test,
                  beforeSend: function() {
                    parent.animate({'backgroundColor':'#fb6c6c'},300);
                  },
                  success: function(data, textStatus, jqXHR) {
                    if (data == "VALID") {
                        parent.slideUp(300,function() {
                          parent.remove();
                        });
                    };
                  }
            });
          });
        });
    </script>
.
.
.
    <?php foreach ($query->result() as $list): ?>
        <span style="display: block">
            <?php echo $list->path; ?> -- <a href="javascript:void(0)" id="artid-<?php echo $list->id; ?>'" class="approval">Approve artwork</a>
        </span>
    <?php endforeach; ?>
.
.
.
4

3 回答 3

2

你没有回应任何东西,因此成功不是评估任何东西

尝试添加:

PHP

function approve($id) {
    $this->db->where('id', $id);
    $this->db->update('galeri', array('approved' => '1')); 
    return TRUE; // you could use several dif methods to check if updated
}

function approve($id) {
    if ($this->galeri->approve($id)) {
       echo("VALID");
    }
}

阿贾克斯

$.ajax({
      type: 'post',
      url: 'approve',
      data: test, // Not sure what to put here. 
      beforeSend: function() {
        parent.animate({'backgroundColor':'#fb6c6c'},300);
      },
      success: function(data, textStatus, jqXHR) {
        if (data == "VALID") {
            parent.slideUp(300,function() {
              parent.remove();
            });
        };
      }
});

另外,出于多种原因,我建议您删除链接上的“e.preventDefault”

  • 您不必在链接上放置点击命令
  • 如果你这样做,将它的 href 设置为javascript:void(0),与 e.preventDefault 一样好,但跨浏览器功能读取问题的可能性较小(组织?)
  • 如前所述,某些浏览器的某些版本(咳嗽即咳嗽)不喜欢在函数开始时看到 e.preventDefault,我不记得是什么版本,但我曾经遇到过这个问题,几乎让我发疯了,我不得不删除我的阻止默认值!(哈哈)
于 2012-04-20T14:37:54.530 回答
0

我认为您应该在某些事件上触发该 jquery/ajax 请求。因此,如果我认为您在用户单击批准链接时尝试执行该 ajax,请尝试以下操作:

<script type="text/javascript">
        $(document).ready(function() {

       $('.approval').each(function(){
                  $(this).click(function(){
               var test = $("a.approval").attr("id").replace('artid-','');
            $.ajax({
                  type: 'post',
                  url: 'approve',
                  data: test,
                  beforeSend: function() {
                    parent.animate({'backgroundColor':'#fb6c6c'},300);
                  },
                  success: function(data, textStatus, jqXHR) {
                    if (data == "VALID") {
                        parent.slideUp(300,function() {
                          parent.remove();
                        });
                    };
                  }
            });
          });

      });
    });


        });
    </script>
.
.
.
    <?php foreach ($query->result() as $list): ?>
        <span style="display: block">
            <?php echo $list->path; ?> -- <a href="javascript:void(0)" id="artid-<?php echo $list->id; ?>'" class="approval">Approve artwork</a>
        </span>
    <?php endforeach; ?>
.
.
.

请检查您在 config.php 文件中的 global_csrf 保护是否设置为 true 或 false。

$config['csrf_protection'] = TRUE;

如果它设置为 true,那么您还需要在您的 ajax 请求中传递 csrf 令牌,否则 codeigniter 将不会执行您的请求。

于 2012-04-21T07:47:56.150 回答
0

谢谢你们花时间回答。我发现问题出在 $.ajax 的“数据”属性上。这是我想出的解决方案(这正是我想要的方式):

<script type="text/javascript">
        $(document).ready(function () {
            $('a.approval').click(function () {
                var test = $(this).attr('id');
                $.ajax({   
                    url: "site/approve/"+test, 
                    type: "POST", 
                    // data: test,
                    success: function(data) {

                        $('.asdf-'+test).css("background-color", "green");
                    }
                })
            });
        });
</script>

这是一种使用 $.ajax 的健康方式吗,我想知道。

于 2012-04-22T16:49:16.970 回答