2011-10-23 121 views
0

我正在使用jQuery可拖放和可拖放函数。所以当一个元素被丢弃时,一个ajax调用会被启动,并将参数作为查询字符串传递。我知道如何传递查询字符串。但我需要在查询字符串参数中进行一些条件检查。我不知道它是如何做到的。请在下面找到我的代码。在jQuery中传递ruby参数作为查询字符串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=<%[email protected]%>&page=<%[email protected]%>?<%[email protected]%>:nil&ref_id=<%=section.id%>&name=<%=name%>' 

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

+0

的问题不明确。关于nil方法问题,可能没有定义@variable。你想写什么样的条件?我的建议是:不要混合使用ruby和JS代码。使用从partials调用的纯JS功能(在.js文件中)(在Ruby参数中始终为:argument.to_json) – tokland

回答

1

首先,你的三元问号和冒号在错误的地方,他们应该是里面 ERB的分隔符。你最好在这里使用data选项$.ajax;这不仅会更清晰,而且会阻止您在POST请求中使用GET参数。而你应该逃避你在JavaScript中使用的价值escape_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) %>' 
    }, 
    //... 

这个假设当然是sectionname在ERB可作为Ruby的变量,而不是客户端的JavaScript变量。

如果因为某些原因,你必须使用一个GET查询字符串POST请求,那么你想要的东西是这样的:

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