私の制御外にある SOAP サーバーからデータを取得する必要がある Rails アプリケーションがあります。統計が添付されたユーザーのリストを取得し、データを JSON として返します。
そのデータを取得したら、Rails アプリ データベースから取得したデータと結合する必要があります。
SOAP サーバーから JSON を取得したら、それを Rails コントローラーに送信して、JSON に新しい値を追加し、ビューに送り返すことができるようにします。
私の問題は非常に単純なものです。コントローラーに入ると、JSON を読み取って反復処理できないようです。
私のビューからの JS stat_data は、SOAP サービスから受け取った JSON です
window.get_metrics = (stat_data) ->
update_loading_message 'Getting Metrics'
console.log stat_data
$.ajax '/tracking/get_metrics',
type: "POST"
data: client_data: stat_data
dataType: 'json'
success : (data) ->
console.log(data)
# populate_table(data)
コントローラ
@client_advisors = params[:client_data]
puts @client_advisors
# This is where I would do my other processing / model calls to get new data
render file: 'tracking/metrics_data.json.erb', content_type: 'application/json'
の出力puts @client_advisors
{
"0"=>
{
"personnel_id"=>"1495",
"personnel_name"=>"John Smith",
"statistic_x"=>"200"
},
"1"=>
{
"personnel_id"=>"5266",
"personnel_name"=>"John Candy",
"statistic_x"=>"300"
},
"2"=>{
... etc ...
}
}
追跡/metrics_data.json.erb
[
<%= puts '~~~~~~~~~~~~ PROCESSING JSON' %>
<% @client_advisors.each do |advisor| %>
<%= puts 'advisor::' %>
<%= puts advisor %>
<%= puts 'advisor.inspect::' %>
<%= puts advisor.inspect %>
{
... This is where my re-generated JSON would go
}
<% end %>
]
私はばかげて、metrics_data.json.erb で person_name または person_id をターゲットにできないようです。コンソールで各完全なアドバイザーオブジェクトを正常に出力しています...しかし、オブジェクトの値をターゲットにするために何を使用すればよいかわかりません。私は試しましたadvisor.personnel_name
(オブジェクトの名前が「0、1、2など」であるため、明らかに機能しません)advisor['0']
、、、。より深いレベルに進み、personal_name を取得できるものはありません。advisor[0]
advisor[:0]
あなたの時間を大歓迎です!
解決しました!
@willglynnに感謝
「jQuery には、少し驚くべきことに、JSON を作成するメカニズムがありません。問題なく解析できますが、自分でエンコードする必要があります。JSON.stringify を使用できますが、特定のブラウザーではJSON2.jsが必要です」 - @willglynn
更新された JS
window.get_metrics = (stat_data) ->
update_loading_message 'Getting Metrics'
console.log stat_data
$.ajax '/tracking/get_metrics',
type: "POST"
data: client_data: JSON.stringify(stat_data)
dataType: 'json'
success : (data) ->
console.log(data)
# populate_table(data)
更新されたコントローラー
@client_advisors = JSON.parse(params[:client_data])
更新された tracking/metrics.erb.json
<% puts advisor %>
<% puts advisor['personnel_id'] %>