0

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

我有以下 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"=>"unknown", "selected"=>"false"}, "data2"= >{"position"=>"2", "item_id"=>"item_2", "to_do" =>"unknown", "selected"=>"false"}, "data3"=>{"position"=> "3", "item_id"=>"item_3", "to_do"=>"unknown", "selected"=>"false"}, "data4"=>{"position"=>"4", "item_id" =>"item_4", "to_do"=>"unknown", "selected"=>"false"}, "data5"=>{"position"=>"5" , "item_id"=>"item_5", "to_do"=>"unknown", "selected"=>"false"}}

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

{“动作”:“make_suggestion”,“控制器”:“食谱”,“格式”:“json”}

4

2 回答 2

0

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

      $.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
于 2013-07-20T01:56:53.930 回答
0

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

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

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

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

拖尾rails日志

对您的 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"
于 2013-07-20T15:21:24.807 回答