Sinatra(Ruby) - 使用Ajax发布

时间:2013-10-23 14:05:31

标签: jquery ruby ajax sinatra sequel

我试图使用$ .post动态提交一些数据,我目前正面临着一个我无法理解的神秘错误。

这是我的路线......

post "/share" do
    sid   = params[:sid]
    user  = (session[:level] == 1) ? params[:user] : session[:user]
    # Database
    require_relative "../../database/db.rb"
    db = DBShare.new
    db.share(sid, user)
end

这是我将$ .post请求发送到路线时得到的结果......

!! Unexpected error while processing request: undefined method `close' for 1:Fixnum

ajax调用在.fail()中返回,但数据库调用已完成(我使用Sequel执行存储过程的数据库调用) - 有趣的是它在第一次调用时调用该过程两次,并且只打开一次后续电话。

我认为这可能是因为我的路线没有返回内容标题 - 所以我添加了#34;成功"在db调用之后。

这导致jquery在.success()块中返回,但数据库调用未完成。

这是我的jQuery调用

// Share or unshare
$(document).on('click', '.share-unshare', function(event) {
    if (event.type == 'click') {
        var element     = $(this);
        var text        = $(this).text();
        var sid         = $(this).attr('sid');
        var r = '';

        // Unshared
        if (text == "Unshare") {
            r = confirm("Are you sure you want to unshare this?");
            if (r == false) {
                return false;
            }
            share(sid, element);

        // Shared
        } else {
            r = confirm("Are you sure?");
            if (r != false) {
                share(sid, element);
            }
        }

    }

    function share(sid, element) {
        var user = $('#details').attr('user');
        $.get('/share/', { 'sid' : sid, 'user': user })
            .success(function(data) {
               if (text == "Share") {
                   element.html("Unshare");
               } else {
                   element.html("Share");
               }
            })
            .fail(function() {
               alert("Something went wrong - unable to share / unshare");
            })
            .always();
    }

});

这里是数据库调用(程序运行正常,因此不关心PL / SQL)

    def share(sid, user)
        sql = "
        BEGIN
            pa_share.pr_share_handle(?, ?);
        END;
        "
        ds = $db_app[sql, sid, user]
    end

在这个阶段 - 我感到非常困惑!有没有人有什么想法可能会好吗?

非常感谢

更新

在我的params绑定到db调用之后,我设法通过添加 ds.insert 来解决此问题..

def share(sid, user)
    sql = "
    BEGIN
        pa_share.pr_share_handle(?, ?);
    END;
    "
    ds = $db_app[sql, sid, user]
    **ds.insert**
end

0 个答案:

没有答案