单击 jquery 按钮 + 发送没有表单的数据 - 书签

Posted

技术标签:

【中文标题】单击 jquery 按钮 + 发送没有表单的数据 - 书签【英文标题】:click jquery button + send data without form - bookmark 【发布时间】: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)通过控制器函数的最后一行连接到控制器。 【参考方案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 函数将信息发布到数据库。

以上是关于单击 jquery 按钮 + 发送没有表单的数据 - 书签的主要内容,如果未能解决你的问题,请参考以下文章

JQuery validate + Gravity 表单冲突?

如果单击任何表单元素,则使用 Jquery 启用提交按钮

在 jquery 验证后提交表单 - 需要通过单击按钮来发布数据

我如何以邮件形式发送表单数据并仍然提交

使用 jquery 在按钮单击上添加文本到简单表单

使用 js/jquery 在 ruby​​ on rails 中隐藏 form_tag 上的提交按钮