【问题标题】:JavaScript array becomes Ruby HashJavaScript 数组变成 Ruby Hash
【发布时间】:2013-09-26 02:45:58
【问题描述】:

为什么我在 JavaScript 中的数组索引会作为字符串发送到 Ruby?我没有使用分数 [0],而是以分数 [“0”] 的形式访问第一个元素。我也不是以 score.candidate_id 的形式访问我的实例变量,而是以 score["candidate_id"] 的形式访问。我该如何完成这项工作?

代码:我的 JQuery 通过此函数通过 AJAX 发送分数:

$.post("submit.com", {scores: results}, function(data) {console.log(data)}, "json")

其中results 是一个由

组成的数组
{judge_id: x, category_id: y, candidate_id: z, score: s}

Ruby 后端(Sinatra 不工作)

post '/submit' do

    woot = JSON.parse(params[:scores])

    woot.each do |new_score|
        Score.new({
            score: new_score["score"],
            pageant_id: Pageant.active.id,
            candidate_id: new_score["candidate_id"],
            judge_id: new_score["judge_id"],
            category_id: new_score["category_id"]
            }).save
    end

    params[:scores]["1"].inspect.to_json
end

【问题讨论】:

  • 你确定results是一个数组吗?
  • @ExplosionPills 是的,$.isArray 将其返回为 true。

标签: javascript jquery ruby json sinatra


【解决方案1】:

在发送参数之前尝试对参数进行字符串化。尝试使用 firebug 并查看请求是如何与您当前的代码一起发送的。这基本上会发生,因为 jQuery 将 JSON 中的这些键作为表单元素的名称,并且它会将其视为您的表单中有一个元素。

尝试这样发送:

$.ajax({
 type : "POST",
 url :  'submit.com',
 dataType: 'json',
 contentType: 'application/json',
 data : JSON.stringify(results)
 });

在我的应用程序中,虽然我不使用 stringify,但曾经遇到过这个问题并使用 stringify 正确传递数据。

【讨论】:

  • 是的,我使用了 Stringify 并且它可以工作,我只是在想是否有办法让它在没有 Stringify 的情况下工作。
  • 您是否尝试过在没有字符串化的情况下按上述方式发送?
  • 我不认为stringify 实际上是这里的基本要素。我刚刚测试了POST 的多种方法,并且数组中的数组在使用 stringify 和不使用 stringify 时都有效。定义特征是指定:contentType: 'application/json'。换句话说,Ruby 正在关注标头。
猜你喜欢
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多