【问题标题】:jQuery AJAX POST to Rails 3.2.1 Params won't workjQuery AJAX POST 到 Rails 3.2.1 参数不起作用
【发布时间】:2013-07-20 01:25:02
【问题描述】:

我正在尝试向我的 rails 控制器发送 AJAX 请求(items controller 中的 make_suggestion 方法)。

我有以下 javascript:

$.ajax({
  url: "/items/make_suggestion",   // pass to make_suggestions in recipes controller
  type: "POST",     
  dataType: 'json', 
  data: parsed_data // a Javascript object/data hash
});

启用 debug(params) 后,我在 params 中看不到任何 parsed_data。

谁能指出什么是错的?以及如何通过触发 AJAX 在 Rails 的参数中创建符号?


更新

在我的控制器中,我有

def make_suggestion
    respond_to do |format|
        format.html 
        format.json { render :json => params }
    end
end

我的 ajax 代码:

$.ajax({
  url: "http://localhost:3000/items/make_suggestion",   // I'm doing the proper routing later, since '/make_suggestion' routes to 'items/1/make_suggestion'
  type: "POST",     
  dataType: 'json', 
  data: parsed_data,
  success: function(returned_value){
            if(returned_value)
                alert('true');
            $('.test').append(returned_value);
        }, 
  error: function(returned_value){
        $('.test').html('<p>Error in AJAX request</p>');
        alert('Not working');
  }
});

我的 parsed_data 看起来像这样:

参数:{"data1"=>{"position"=>"1", "item_id"=>"item_1", "to_do"=>"未知", "selected"=>"false"}, "data2"=>{"position"=>"2", “item_id”=>“item_2”,“to_do” =>“未知”,“选定”=>“假”},“data3”=>{“位置”=>“3”,“item_id”=>“item_3”,“to_do”=>“未知”,“选中"=>"假"}, "data4"=>{"position"=>"4", "item_id"=>"item_4", "to_do"=>"unknown", "选中"=>"false"}, "data5"=>{"position"=>"5" , "item_id"=>"item_5", "to_do"=>"unknown", "selected"=>"false"}}

但是当我转到 /items/make_suggestion.json 时,它只显示以下内容:

{"action":"make_suggestion","controller":"recipes","format":"json"}

【问题讨论】:

  • 我的猜测是你的 parsed_data 变量为空 - 尝试将其输出到浏览器 javascript 控制台
  • 看来你准备好了?我假设上面的Parameters 输出来自您的rails 日志?所以只需根据需要访问 Rails 操作中的任何参数数据params[:data1][:item_id] # =&gt; item_1
  • parsed_data 一直存在,但问题是我无法访问 params 数据。 params 哈希不包含任何 parsed_data (请参阅问题的最后一行)
  • 不确定您说“但是当我访问 /items/make_suggestion.json ...”时的意思是指您在浏览器地址栏中输入了“localhost:3000/items/make_suggestion.json”吗?跨度>
  • 是的,我就是这个意思

标签: javascript jquery ruby-on-rails


【解决方案1】:

您可以通过多种方式查看/跟踪参数

1) 跟踪您的 Rails 日志文件 tail -f log/development.log,注意 Rails Web 服务器通常在启动后开始跟踪到控制台

2) 引发异常并在浏览器中查看调试输出

3) 在浏览器中使用 javascript 控制台(有些是内置的),也可以考虑使用带有 Firebug 插件的 Firefox(使用“控制台”)选项卡

跟踪轨道日志

向您的 Rails 服务器发出的每个请求都将显示所有传递的参数,以及接收请求的控制器和操作以及生成的所有 sql 语句 考虑将 'awesome_print' gem 添加到您的应用程序以获得更好的日志输出,一旦安装 logger.ap params 将为您提供一个很好的可读输出

引发异常

不经常需要,但如果您将raise "ZOMG" 添加为控制器操作的第一行,它将呈现 html 输出并显示所有传递的参数。这对 ajax 调用几乎没用

Javascript 控制台

这将显示所有 ajax 请求和 javascript 发送到 rails 服务器的所有参数以及返回的所有数据,非常有用

Rails 会将 javascript ajax 参数映射到 ruby​​ 哈希,这非常好,因为这些数据结构在浏览器中与在 Rails 中几乎完全相同,即

// javascript data structure
var parsed_data = {
  foo: "FOO",
  bar: "BAR",
  person: {
    first_name: "Joe",
    last_name: "Smith"
  }
}

使用 awesome_print 输出到日志会导致类似于以下内容的 ruby​​ 哈希值

logger.ap params

{
   :foo => "FOO",
   :bar => "BAR",
   :person => {
    :first_name => "Joe",
     :last_name => "Smith"
   }
}

# access the data
params[:foo]
# => "FOO"
params[:person][:first_name]
# => "Joe"

【讨论】:

  • 感谢回复和指点,但parsed_data不为空,请看更新。
【解决方案2】:

您向控制器发布的数据不详细。 看看我的例子:

      $.ajax({
            url:'/contact/new',
            type:'get',
            data:{object_param:{
                first_name:'zainulmasadi',
                last_name:'masadi ganteng',
                phone_number:'089745674119541'}},
            dataType:'json',
            success:function(returned_value){
                if(returned_value)
                    alert('true');
            }
        })

和我的控制器

def new
    @contact = ContactPhone.create(params[:object_param])
    if @contact.save
      respond_to do |format|
        format.html
        format.json {render :json => @contact}
      end
    end

  end

【讨论】:

  • 那么我应该能够在调试(参数)中看到参数哈希吗?如果有,在哪一页?
  • 我不明白你的目的..??你可以用你的模型创建相同的参数..我希望解决:D
  • 因为我想检查控制器是否真的收到了数据。现在在我的代码中,.ajax() 中的成功函数正在运行,但是数据不存在,即 params[:data1] 为 nil
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多