jQuery AJAX POST to Rails 3.2.1 Params获胜'不起作用

jQuery AJAX POST to Rails 3.2.1 Params won't work

本文关键字:获胜 Params 不起作用 POST AJAX to Rails jQuery      更新时间:2023-09-26

我正试图向我的rails控制器(items controller中的make_suggestion方法)发送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
});

调试(params)打开后,我在params中看不到任何已解析的数据。

有人能指出出了什么问题吗?我如何通过激发AJAX在Rails中的params中创建符号?


更新

在我的控制器中,我有

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');
  }
});

我的解析数据如下:

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

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

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

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

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控制台

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

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"

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

      $.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