无法访问 json 对象属性和值在 rails 视图中显示为未定义

Posted

技术标签:

【中文标题】无法访问 json 对象属性和值在 rails 视图中显示为未定义【英文标题】:Unable to access json object property and value is displayed undefined in rails view 【发布时间】:2018-09-05 16:21:15 【问题描述】:

我几乎看过类似的问题,但我的问题还没有解决。

我有以下代码。

控制器

def create
    @task_list = TaskList.new(task_list_params)

    if @task_list.save
        respond_to do |format|
            format.json  render json: @task_list
        end
    else
        return
    end
end

Ajax 脚本

$(document).on('click','.add', function()

  count = 0;
  user_id = $('#user_id').val();
  var name = $('.new-list').val();
  var current = $(this);
  if(name)
    $.ajax(
      method: 'POST',
      url: action,
      dataType: 'JSON',
      data:  
        task_list: 
          name: name, 
          user_id: user_id 
        
      
    ).success(function(response)
      var data = JSON.stringify(response);
      alert(data.id);
      $(current).parent().parent().parent().before(
        '<div class="col-md-12">'+
          '<a href="task_list/" class="btn btn-xs list ">'+name+'</a>'+
        '</div>'
        );
      $(current).parent().parent().parent().remove();
      $('.add-list').show();
    );
  else
    alert('please add title');
  

);

我只想通过ajax post请求获取刚刚保存到数据库的记录的id。在这里,在成功函数中它只是提醒未定义,我不知道出了什么问题。

这是示例响应。

【问题讨论】:

直接使用response.id,不需要JSON.stringify() 【参考方案1】:
.success(function(response)
      alert(response.id);

从您的成功函数中删除 JSON.stringify。响应已经是 JSON 格式,您可以直接从中获取值。

JSON.stringfy 将 javascript 对象转换为字符串。

说明

您的响应已经是 JSON 格式,并且您在 AJAX 调用中使用了 dataType: "JSON"。这将使在服务器和客户端之间传输 JSON 数据成为可能。 当您的响应已经是 JSON 格式时,您可以使用它的属性而无需解析它。即response.id

如果您没有使用 dataType: "JSON" 并且您将 json 编码响应从控制器传递到查看文件,您必须首先解码响应以获取其值。

var d = $.parseJSON(response);
alert(d.id);

【讨论】:

感谢您的回答,它完美运行,您能否详细解释一下出了什么问题,我是前端和 Rails 的新手。 请查看我的回答中的解释。希望你现在清楚。如果它解决了您的问题,请标记答案已批准。 :) 谢谢@SagarGautam 感谢您的时间和友好的信息,我会接受这个答案

以上是关于无法访问 json 对象属性和值在 rails 视图中显示为未定义的主要内容,如果未能解决你的问题,请参考以下文章

添加虚拟目录时,“无法验证对路径 (C:\inetpub\wwwroot) 的访问”

Rails 视图表以显示来自另一个模型的值

安装了IIS5,下载了中国站长ASP程序,将那些程序文件放到wwwroot?怎么不能访问呢?

如何从数组中的对象添加新的键和值?

Microsoft Office Excel 无法访问文件'c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx'

根据列和值在dataGridView中查找一行