如何为ajax帖子写一个json数组?

时间:2014-05-12 04:10:56

标签: jquery ruby-on-rails ajax json

var obj = { subjects: [{ area: "Math"}, {area: "English"}] }

$.ajax({
  type: 'POST',
  data: {"mydata": JSON.stringify(obj)},
  url: '/tosubjects',
  dataType: "json",
  contentType: "application/json",
  processData: false,
  beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token',   $('meta[name="csrf-token"]').attr('content'))},
  statusCode: {
     200:function() { alert("200"); },
     202:function() { alert("202"); }
  },
  success: function() {  alert("sent"); },
  error: function(xhr){  alert("error: " + xhr.statusText);       
  }        
});

<%= csrf_meta_tag %>

在我的表格助手中。我正在使用Rails。

这适用于单个记录。但是,如上所述,当尝试将两个记录作为json数组传递时,我得到错误:

 JavaScript component does not have a method named: "available"

这是因为我写的方式

data: {"mydata": JSON.stringify(obj)},

当我把它写成:

数据:JSON.stringify(obj)

没有错误,但是我没有办法为对象指定名称,例如params[:mydata]

如何编写data:字段?

1 个答案:

答案 0 :(得分:0)

这很有用。但如果有更好的方法......请!

var obj = { subjects: [{ area: "Math"}, {area: "English"}] }

$.ajax({
  type: 'POST',
  data : JSON.stringify(obj),
  url: '/tosubjects',
  dataType: "json",
  contentType: "application/json",
  processData: false,
  beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
  statusCode: {
     200:function() { alert("200"); },
     202:function() { alert("202"); }
  },
  success: function() {  alert("sent"); },
  error: function(xhr){  alert("error: " + xhr.statusText); }        
});

在控制器中,

ar = params[:subjects]

ar.each do |obj|
   subject = Subject.new(obj)
   if subject.save
    #
   else
    #
   end
end

respond_to do |format|
      format.html {}
      format.json { 
        render :json => @subject
      }
end