javascript - rubyonrails 中 ajax 发布后未定义的追加

标签 javascript jquery ruby-on-rails ajax

我试图在使用 ajax 发布后附加一些信息

这是我的路线:

match 'api/people/', to: 'people#people_get_all', via: [:get]
match 'api/people/:id', to: 'people#people_get', via: [:get]

match 'api/people/', to: 'people#create', via: [:post]

这是我的 JavaScript:

var $people = $('#people');
var $first_name = $('#first_name');

$('#add_user').on('click', function(){

    var person = {
        person: {
            first_name: $first_name.val(),
            last_name: $last_name.val(),
            location: $location.val(),
            phone: $phone.val()
        }
    };

    $.ajax({
        type: 'POST',
        url: '/api/people/',
        data: person,
        success: function(newPerson){
            $people.append('<p><strong>First Name: </strong>' + newPerson.first_name + '</p>');
        },
        error: function(){
            alert('error saving person to database');
        }
    });

});

当我点击按钮时,它会成功地将记录保存在数据库中,但是当追加发生时,它会带来一个未定义的值。

我这里有什么问题吗?

这是 Controller :

before_action :set_person, only: [:show, :edit, :update, :destroy]
def create
  @person = Person.new(person_params)

  respond_to do |format|
    if @person.save
      format.html { redirect_to @person, notice: 'Person was successfully created.' }
      format.json { render :show, status: :created, location: @person }
    else
      format.html { render :new }
      format.json { render json: @person.errors, status: :unprocessable_entity }
    end
  end
end

private

  def set_person
    @person = Person.find(params[:id])
  end


  def person_params
    params.require(:person).permit(:first_name, :last_name, :location, :phone)
  end

这就是按下按钮后发生的情况,它带来了未定义

enter image description here

最佳答案

您需要使用 dataType: 选项告诉 $.ajax 响应是 JSON。

$.ajax({
    type: 'POST',
    url: '/api/people/',
    data: person,
    dataType: 'json',
    success: function(newPerson){
        $people.append('<p><strong>First Name: </strong>' + newPerson.first_name + '</p>');
    },
    error: function(){
        alert('error saving person to database');
    }
});

关于javascript - rubyonrails 中 ajax 发布后未定义的追加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31485813/

相关文章:

ruby-on-rails - Rails & postgres - 恢复后重新索引

attributes - document.body.setAttribute 在 IE-7 中不起作用

javascript - Angular - $stateParams 在 Controller 中为空

javascript - 航点.js : check if element is in view on page load

javascript - ajax 的 ajax 硬编码值(新手)

javascript - jQuery 中的奇怪添加行为

javascript - Wysihtml5 不工作,Uncaught TypeError : $(. ..).wysihtml5 不是函数

javascript - ajax 函数在页面加载时未触发

jquery - 努力将总行定位在 DataTables 表的底部

ruby-on-rails - 使用 Carrierwave 直接上传到 S3