如何在rails中正确地传递JSON

How to properly pass a JSON in rails

本文关键字:JSON 正确地 rails      更新时间:2023-09-26

我也是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. 

似乎没有人告诉作者不要在定义中使用一个词。

我试图理解渲染,因为根据如何传递json响应回客户端,这是做任务比我尝试过的方法更好的方式。但是没有其他组件,我不知道如何实现它。

可能是由于我缺乏网络经验,所以如果有人有任何链接到可能有帮助的定义,请张贴他们。

我得到这个错误:

GetData: JSON错误。解析:JSON数据第2行第3列的属性名或'}'

当我在警告框中打印字符串时,它显示为一个长字符串,所以我不知道"line 2"在哪里。如果我将限制设置为1,我将得到同样的错误,这确实使"line 2"难以找到。

这里是我得到的数据的一个例子:

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

我不知道是否应该拼写为"& &;",或者至少这是它在警告框中显示的方式。我不知道这是正常的还是导致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
}

路由wholenumber/index指向一个index.html.erb链接:

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

这是一种不寻常的方法,但是您可以将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

Rails指南有一个更全面的Rails渲染的演练