【问题标题】:Angular cannot access returned dataAngular 无法访问返回的数据
【发布时间】:2014-03-26 16:28:06
【问题描述】:

在我的 Angular / Rails 应用程序中,我正在使用 angular-file-upload gem 上传电子表格。 https://github.com/danialfarid/angular-file-upload

我将电子表格传递给 Rails 后端,它会处理数据并返回一个 JSON 数组。

向上传递文件的 Angular 代码是这样的:

$scope.submitForm = function () {
  console.log('submit upload2');
  return $scope.upload = $upload.upload({
    url: '/api/batches/spreadsheet_upload.json',
    data: {
      id: 99,
      assembly: "xy"
    },
    file: $scope.file
  }).success(data, status, headers, config)(function () {
      debugger
    $scope.selector.tabledata = data;
    $scope.uploaded = true;
  });
};

Rails 接受文件并处理它。我正在尝试使用 render json: {data: spreadsheet_data}

返回它
def spreadsheet_upload
  Rails.logger.debug("here params: #{params}")
  spreadsheet = nil
  case File.extname(params[:file].original_filename)
    when '.csv' then spreadsheet = Roo::CSV.new(params[:file].path)
    when '.xls' then spreadsheet = Roo::Excel.new(params[:file].path, nil, :ignore)
    when '.xlsx' then spreadsheet = Roo::Excelx.new(params[:file].path, nil, :ignore)
    else raise "Unknown file type: #{file.original_filename}"
  end

  spreadsheet_header = spreadsheet.row(1)
  spreadsheet_data = []

  (2..spreadsheet.last_row).each do |i|
    row = Hash[[spreadsheet_header, spreadsheet.row(i)].transpose]
    spreadsheet_data.push(row)
  end
  render json: {data: spreadsheet_data}
end

Chrome 中的网络选项卡显示数据已从 Rails 服务器返回,但 Angular 似乎不知道如何处理它。

ReferenceError: data is not defined
    at Object.$scope.submitForm (http://0.0.0.0:3000/assets/controllers/DesignViewCtrl.js?body=1:203:18)
    at http://0.0.0.0:3000/assets/lib/angular.min.js?body=1:1936:30
    at http://0.0.0.0:3000/assets/lib/angular.min.js?body=1:4127:15
    at Object.e.$eval (http://0.0.0.0:3000/assets/lib/angular.min.js?body=1:2432:24)
    at Object.e.$apply (http://0.0.0.0:3000/assets/lib/angular.min.js?body=1:2439:40)
    at HTMLFormElement.<anonymous> (http://0.0.0.0:3000/assets/lib/angular.min.js?body=1:4126:15)
    at HTMLFormElement.jQuery.event.dispatch (http://0.0.0.0:3000/assets/jquery.js?body=1:2940:98)
    at HTMLFormElement.elemData.handle (http://0.0.0.0:3000/assets/jquery.js?body=1:2750:123) 

网络标签中的返回数据

{"data":[{"chrom":4.0,"chrom_start":55593607.0,"chrom_end":55593607.0},   {"chrom":"4","chrom_start":55593609.0,"chrom_end":55593617.0},{"chrom":"6","chrom_start":133105152.0,"chrom_end":133105152.0}]}

我也尝试过更改为响应,但这也没有用。

  }).success(resp)(function () {
    $scope.selector.tabledata = resp.data;
    $scope.uploaded = true;
  });

【问题讨论】:

    标签: javascript ruby-on-rails angularjs


    【解决方案1】:

    不确定,但我看到的success 上的结构看起来像

    .success(function(data, status, headers, config) { $scope.selector.tabledata = data; $scope.uploaded = true; });

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-06
      • 2016-03-12
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      相关资源
      最近更新 更多