如何在rails中正确传递JSON

时间:2015-07-27 18:41:29

标签: javascript ruby-on-rails ruby json

我也是Web开发和rails的新手。我在php中创建了一个内部使用的Web应用程序,现在正将它转换为rails。试图找出渲染的内容很困难。例如,我找到这样的定义:

render(options = nil, extra_options = {}, &block) protected

Renders the content that will be returned to the browser as the response body. 

似乎没有人告诉作者你在其定义中没有使用任何一个词。

我试图理解渲染,因为根据How to pass json response back to client,这是一种比我尝试过的方法更好的完成任务的方法。但是如果没有其他的方法,我不知道如何实现它。

可能是由于我缺乏网络经验,所以如果任何人有任何可能有用的定义链接,请发布。

我收到此错误:

  

GetData中的错误:JSON.parse:JSON数据第2行第3列的预期属性名称或“}”

当我在警告框中打印字符串时,它显示为一个长字符串,因此我不知道“第2行”在哪里。如果我将限制设置为1,我会得到相同的错误,这使得“第2行”很难找到。

以下是我回来的数据示例:

[{"DocumentNbr":"SS9230","DocumentRevision":""},{"DocumentNbr":"SS8640","DocumentRevision":"17"},{"DocumentNbr":"SS8618","DocumentRevision":"4"},{"DocumentNbr":"SS8630","DocumentRevision":"20"},       

我不知道“是否应该拼写为& quot或至少是如何在警告框中显示。我不知道这是正常的还是导致JSON的错误。解析失败。除了警告之外还有其他方法来检查数据吗?

我有一个javascript函数可以在视图中调用'GetData':

var wholeNumberData;
wholeNumberData = GetData('wholeNumber', wholeNumber);

看起来像这样(精简版):

function GetData(getType, param) {

    var data;
    var params;

    params = 'wholeNumber=' + param;
    data = SendRequest('wholenumber/index', params);
    return data;
}

function SendRequest(source, params) {

var http = new XMLHttpRequest();

http.open("GET", source + '?' + params, false);
http.setRequestHeader("Content-type","application/json");
http.onload = function() {
        //alert('in function');
}
http.send(params);

alert(http.responseText);//Works
return JSON.parse(http.responseText);//FAILS

}

路径全数/索引指向一个index.html.erb,其中包含:

<% @list = Wholenumber.where("DocumentNbr LIKE ?", params[:wholeNumber] + "%").limit(10) %>
<%= @list.to_json(:only => [:DocumentNbr, :DocumentRevision]) %>

1 个答案:

答案 0 :(得分:1)

这是一种不寻常的方式,但你可以在html_safe方法中添加to_json,它应该如何运作。

<%= @list.to_json(:only => [:DocumentNbr, :DocumentRevision]).html_safe %>

如果您希望控件呈现JSON,而不是尝试从html解析JSON,您可以让控制器操作执行以下操作:

def action
  @list = Wholenumber.where("DocumentNbr LIKE ?", params[:wholeNumber] + "%").limit(10)
  render json: @list.to_json(:only => [:DocumentNbr, :DocumentRevision])
end

The Rails Guides有一个更彻底的Rails渲染演练