ajax GET json数据发送到控制器问题

时间:2011-03-20 21:28:41

标签: ruby-on-rails ajax jquery

我正在打电话

$.get('/profile', {'data_id': 0}, null, 'script');
当特定事件发生时,在我的profile/index.html.haml

。这是假设在传递json数据时加载profile/index.js.erb。在我的个人资料控制器的index操作中,我有

@dataid = params[:data_id]
if @dataid == 0
  #do something, ie set variables that index.js.erb needs
else
  #do something else
end

但是,if语句似乎不起作用,因此我认为我的js.erb文件没有正确加载(根本不加载)。

但是,如果我执行if !dataid.nil?而不是== 0 (or some other value),它的工作方式就像放入if语句/ js.erb之前的工作方式一样,它必须使得dataid 某些价值......

此外,如果我不使用if语句,并且在我的js.erb dataid = <%= raw @dataid %>; alert(dataid);中,一切正常,警报正确 - dataid为0.那么为什么似乎首先设置raw @dataid的控制器不知道@dataid的值是多少?我很困惑......

除非需要(由data_id指定),否则主要目的是不在控制器中执行所有操作。另外这种方式我认为我能够在我的js.erb中做同样的事情 - 只根据这个参数运行我需要的部分。

1 个答案:

答案 0 :(得分:1)

通过HTTP发送的所有内容都将以字符串形式到达。如果你与“0”比较,它很可能比较相等。在控制器代码中尝试这个:

Rails.logger.debug "All params are:\n#{params.inspect}"
Rails.logger.debug "I got params[:data_id] = '#{@dataid}'"
Rails.logger.debug "The type is: #{@dataid.class}"
Rails.logger.debug "Comparison yields: #{@dataid == 0}"

然后看日志。你会看到我在说什么。