Javascript 在rails中创建JSON对象,然后使用jQuery/Ajax从操作中获取JSON的正确方法是什么?

Javascript 在rails中创建JSON对象,然后使用jQuery/Ajax从操作中获取JSON的正确方法是什么?,javascript,jquery,ruby-on-rails,ajax,json,Javascript,Jquery,Ruby On Rails,Ajax,Json,我正在尝试编写一个应用程序,它将使用AJAX请求从rails操作中获取一些JSON。它似乎工作得很好,但在调试时,我发现当我输出所需的JSON值时,它表示该值未定义 以下是我目前拥有的: 轨道: def complete @case = Case.find(params[:case_id]) respond_to do |format| format.html format.json { render json: { :percentage => @case

我正在尝试编写一个应用程序,它将使用AJAX请求从rails操作中获取一些JSON。它似乎工作得很好,但在调试时,我发现当我输出所需的JSON值时,它表示该值未定义

以下是我目前拥有的:

轨道:

def complete
   @case = Case.find(params[:case_id])
   respond_to do |format|
     format.html
     format.json { render json: { :percentage => @case.complete } } ## Should produce something like {"percentage" => 0} and when I go to this url in my rails app I see that it does.
end
Javascript:

function updatePercentage(id_att, db_id, type) {
  console.clear();
  console.log("updatePercentage was called.");
  $(".loading").progressbar({ value: false });
  $.ajax({
      type: "GET",
      dataType: "json",
      url: "/cases/" + db_id + "/" + type + "_complete.json", // e.g. /cases/42/type_complete.json                                                          
      success: function(result) {
        console.log("\n\nPercentage from AJAX is " + JSON.stringify(result.percentage));
    }
}); 
}
当我转到
localhost:3000/cases/XXXX/type_complete.json
时,我看到
{“percentage”:100}
,显然这已经有了进展。但在js控制台中,我只看到“来自AJAX的百分比未定义”

当我说
console.log(“我得到的JSON对象是”+JSON.stringify(this))
输出为:

JSON:(在控制台中)


为什么会这样?我该如何修复它?据我所知,JSON数据应该在那里。但是Javascript表现得好像不是这样

你太接近了!您只需更改成功回调,如下所示:

success: function( data ) {
   console.log("\n\nPercentage from AJAX is " + data.percentage);
}
成功回调以参数形式传递json数据=)


您还可以使用jQuery getJSON速记方法:

为什么在
success
回调中使用
this
?您应该为该回调提供一个参数,并使用该参数而不是
this
。正如您已经了解到的,
这个
指的是
$返回的承诺。ajax
我以前将它命名为“result”,但当我开始将其他与此处无关的值交给函数时,我将其改为“this”关键字,因此我没有列出它。但是如果您能更清楚地阅读。。。坚持
success: function( data ) {
   console.log("\n\nPercentage from AJAX is " + data.percentage);
}