1

如果我在 Ruby 中呈现 json,我如何访问 javascript 中的值?

在红宝石中,如果我写:

response = {:key => "val"}
response = response.to_json
render :json => response, :status => 200

如何在 javascript 中访问“val”?

如果我在 javascript 中执行 alert(response),我看到 json 周围有一个标签,这会有所不同还是预期的?

我尝试了 jQuery.parseJSON(response) 但出现语法错误。如果我尝试直接访问响应,我不会得到正确的值 - 应该

response.key === "val"

评价为真?

我是在 Ruby 中错误地设置它还是在 javascript 中错误地访问它,或两者兼而有之?

4

2 回答 2

1

如果您可以显示您的 javascript 代码,那将非常有帮助。
无论如何,一种方法是使用 jQuery 的 ajax 函数并将 dataType 设置为 json。

$.ajax({
    type: "GET",
    url: "<your link>",
    dataType: "json",
    success: function(response) {
      if (response.key)
        alert(response.key);
    });
});

希望这可以帮助。

于 2012-05-18T07:10:23.550 回答
0

这是一个简单的例子。

在 ./config/routes.rb

match '/index' => 'application#index'
match '/json' => 'application#json'

控制器,./app/controllers/application_controller.rb:

class ApplicationController < ActionController::Base
  protect_from_forgery

  def index
    # server side code required by index
  end

  def json
    response = {:key => "val"}
    response = response.to_json
    render :json => response, :status => 200
  end
end

发出 ajax 请求的 erb 页面,在本例中为 ./app/views/application/index.html.erb:

<script type="text/javascript" charset="utf-8">
    $(document).ready(
        function(){
            $("a#my_ajax").bind("ajax:success",
                function(evt, data, status, xhr){
                    console.log(data.key);
                    console.log(data.key === "val");
                }).bind("ajax:error", function(evt, data, status, xhr){
                    console.log("doh!")
                });
    });
</script>

<%= link_to "test",  {:controller=>"application",  :action => 'json'}, :remote=> true, :id => "my_ajax" %>
于 2012-05-18T07:15:14.740 回答