将ruby参数作为查询字符串传递给Jquery ajax

时间:2011-10-23 17:16:14

标签: ruby-on-rails ruby jquery

我正在使用jquery draggable和droppable函数。因此,当删除元素时,将启动ajax调用,将参数作为查询字符串传递。我知道如何传递查询字符串。但我需要在查询字符串参数中进行一些条件检查。我不知道怎么做。请在下面找到我的代码。

jQuery('#<%= qtr %>').droppable({
    hoverclass: 'e_high',
    accept: function(elm) {
        if (jQuery(this).hasClass('<%=name%>_edit'))
            return true;
        },
        drop: function() {
            jQuery.ajax({
                type: "POST",
                url: '/sections/reorder?site_id=<%=@site.id%>&page=<%=@page%>?<%=@page.id%>:nil&ref_id=<%=section.id%>&name=<%=name%>'

上面传递查询字符串的方法是否正确。我收到No方法错误。无对象。当我检查终端时,参数是参数:{"page"=>"", "site_id"=>"11650ecf55668fed9e7a624c93adcba2"}

1 个答案:

答案 0 :(得分:1)

首先,你的三元问号和冒号位于错误的位置,它们应该在里面 ERB分隔符。你最好在这里使用$.ajaxdata选项;这不仅会更干净,而且会阻止您在POST请求中使用GET参数。您应该使用escape_javascript来逃避使用JavaScript的价值。试试这样:

jQuery.ajax({
    type: "POST",
    url: '/sections/reorder',
    data: {
        site_id: '<%= j(@site.id) %>',
        page: '<%= j(@page ? @page.id : '') %>',
        ref_id: '%<= j(section.id) %>',
        name: '%<= j(name) %>'
    },
    //...

这当然假设ERB中的sectionname可用作Ruby变量而不是客户端JavaScript变量。

如果由于某种原因你必须使用带有POST请求的GET查询字符串,那么你需要这样的东西:

url: '/sections/reorder?site_id=<%= j(@site.id) %>&page=<%= j(@page ? @page.id : '') %>&ref_id=<%= j(section.id) %>&name=<%= j(name) %>'