【问题标题】:click jquery button + send data without form - bookmark单击 jquery 按钮 + 发送没有表单的数据 - 书签
【发布时间】:2012-05-11 12:05:20
【问题描述】:

我正在开发一个书签功能,用户单击 jQueryui 按钮并将某些信息发送到数据库。但我没有使用表单,因为没有信息供用户输入。

我正在从会话数据中提取用户 ID,并且我正在发送一个 URI 段(URL 的一部分)

使用 codeigniter/php。

我正试图弄清楚在 ajax/post 函数的数据部分中放入什么,因为没有输入表单/没有输入数据,以及如何处理控制器的“提交”部分。

控制器

function addBookmark(){

        if ($this->input->post('submit')) {

            $id = $this->session->userdata('id');               
            $bookmark = $this->uri->segment(3, 0);

            $this->bookmarks_model->postBookmark($id, $bookmark);
        }

    }

型号

function postBookmark() {

     $data = array(
            'user_id' => $user_id,
            'bookmark_id' => $bookmark,
    );

    $this->db->insert('bookmarks', $data);

    }

HTML

<button class="somebutton">Add bookmark</button>

jQuery

$('.somebutton').click(function() { 

            $.ajax({
                url: 'controller/addBookmark',
                type: 'POST',
                data: ???,
                success: function (result) {
                  alert("Your bookmark has been saved");
                }
            });  

    });

【问题讨论】:

  • @wallyk 模型(bookmarks_model)通过控制器函数的最后一行连接到控制器。

标签: jquery ajax codeigniter codeigniter-2


【解决方案1】:

您的问题是您正在检查POST 参数中的submit 键。您可以通过发送 data: {submit:true} 或删除 if 语句并仅处理 POST 请求来伪造它

$('.somebutton').click(function() { 

        $.ajax({
            url: 'controller/addBookmark',
            type: 'POST',
            data: {'submit':true}, // An object with the key 'submit' and value 'true;
            success: function (result) {
              alert("Your bookmark has been saved");
            }
        });  

});

【讨论】:

  • 我用数据尝试过这个:{submit:true} 并且没有数据。我也试过没有 if 函数。我收到了警报,但没有向数据库添加任何内容。
  • 好的,我用我的按钮做了一些操作,现在它可以工作了——正如你所建议的那样,数据字段中没有任何内容。相反,我添加了一个隐藏字段来让数据通过。我已经接受并赞成您的回答,因为它是最接近的。 (现在,如果我能让警报正常工作!):)
【解决方案2】:

不要使用.ajax(),而是使用.get().post()

使用.get()

 $.get('controller/addBookmark',function(data){ 
     alert('Your bookmark has been saved'); 
 });

使用.post()

 $.post('controller/addBookmark', function(data) {
     alert('Your bookmark has been saved, The contents of the page were:' + data); 
 });

【讨论】:

  • 谢谢,我现在就试试。 “数据”的地方应该是什么?只是数据这个词?
  • data是页面上回调的结果。
  • 好的;如何在函数中指示数据?我没有任何意见
  • data 变量是提交页面内容的输出,以防您想在代码中返回它,而不是输入。请参阅@ 下如何使用它的示例987654332@ 例子。
  • 好的,这两个功能我都试过了。第一个产生了警报,但数据库中没有任何内容。第二个给了我一个警报,但它包含一个异常错误;数据库中也没有任何内容。还有其他想法吗?我真的很难过。
【解决方案3】:

来自jQuery.ajax()的文档

要发送到服务器的数据。它被转换为查询字符串,如果 还不是一个字符串。它附加到 GET 请求的 url。

如果您不知道为数据添加什么内容,或许您应该删除该选项?在您的控制器函数 addBookmark() 中,您可以通过删除 if 检查来减少代码。试试这个,看看它是否适合你。

【讨论】:

  • @chowwy 检查控制器中的代码$this-&gt;bookmarks_model-&gt;postBookmark($id, $bookmark); 和模型中的function postBookmark() {,调用是否正确?
  • 函数中的变量$user_id$bookmark是函数postBookmark()的局部变量。函数addBookmark() 使用两个 参数调用bookmarks_model-&gt;postBookmark($id, $bookmark);。因此,您将两个参数传递给函数 postBookmark,但在函数 postBookmark 中,它不需要参数。那么真的,插入数据库是如何完成的?
  • 这只是我转移代码时的疏忽。没有jQuery,我的功能可以正常工作。但我想使用 ajax/post 函数将信息发布到数据库。
猜你喜欢
  • 2023-03-20
  • 2019-09-17
  • 2012-12-15
  • 2017-03-26
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多