JavaScript数组变成Ruby Hash

时间:2013-09-20 16:20:12

标签: javascript jquery ruby json sinatra

为什么JavaScript中的数组索引会以字符串形式发送给Ruby?而不是得分[0],我访问第一个元素作为分数[“0”]。我还访问我的实例变量而不是score.candidate_id,而是作为得分[“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

1 个答案:

答案 0 :(得分:1)

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

尝试像这样发送:

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

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