【问题标题】:Badly formed JSON when posting stringified Array (Javascript and Ruby)发布字符串化数组时 JSON 格式错误(Javascript 和 Ruby)
【发布时间】:2011-08-12 13:34:24
【问题描述】:

我这里有一个非常具体的。我基本上是在尝试将一组字符串发布到我的一个 ruby​​ 服务器并将其处理回对象。问题是当我通过 Json 发送时,它会像这样

返回服务器的非常奇怪的语法。

所以我的问题是我的错误在哪里,我该如何解决?

1:是我的 ruby​​/rails 服务器没有正确解析 json 吗? (我对此表示怀疑,因为无论如何 json 看起来都被破坏了)

2:这是我构建数组的方式吗?

3:或者是(很可能)我如何发布我的数组?


所以只是提供更多细节。 在 javascript 的客户端,我有你日常的字符串数组。 当我运行这个时:

JAVASCRIPT 数组:

 var $arrayToSend = JSON.stringify(headersTitleArr);
 console.log($arrayToSend);

它产生:

[" Page Title "," Description "," Keywords "," Internal Links "," 
External Links "," Content files "," Notes "]

在我这样列出的发布方法之后:

JAVASCRIPT POST:

$.ajax({

        type: 'POST',
        url: webAppURL+websiteID+".json",
        data:  {elementTypes:$arrayToSend},
        success:  function(){
            console.log("YIPPEE I HAS A SUCCESS");},
        dataType: 'json'
    });

在 ruby​​ 方面,这是在倾倒参数后出现的:

根据要求编写 Ruby 代码。

红宝石:

puts YAML::dump(params[:elementTypes])
@x = (params[:elementTypes])
@elementTypes = JSON.parse(@x)

和服务器上的打印结果:

--- "[\" Page Title      \",\" Description     \",\" Keywords        \",\" Internal 
Links  \",\" External Links  \",\" Content files   \",\" Notes           \"]"

【问题讨论】:

  • 是的,可能您发布阵列的方式。但是在我们判断之前让我们看看 ruby​​ 代码好吗? :P
  • @corroded 只是一个疯狂的想法。似乎额外的 \ are onyl 进入服务器端。这可能是因为我将 Json 字符串创建为 data: 并将 type: 声明为 JSON 吗?顺便说一句,我已经根据您的要求重新提出了这个问题。

标签: javascript html ruby-on-rails ruby json


【解决方案1】:

您正在混合类型。不要对任何东西进行字符串化,或对所有内容进行字符串化。在你的情况下,我会替换:

 $.ajax({

        type: 'POST',
        url: webAppURL+websiteID+".json",
        data:  {elementTypes: JSON.stringify($arrayToSend)},
        success:  function(){
            console.log("YIPPEE I HAS A SUCCESS");},
        dataType: 'json'
    });

$.ajax({

        type: 'POST',
        url: webAppURL+websiteID+".json",
        data:  {elementTypes: headersTitleArr},
        success:  function(){
            console.log("YIPPEE I HAS A SUCCESS");},
        dataType: 'json'
    });

jQuery 将为您处理字符串化。如果你想使用字符串化:

    $.ajax({

        type: 'POST',
        url: webAppURL+websiteID+".json",
        data: JSON.stringify({elementTypes: headersTitleArr}),
        success:  function(){
            console.log("YIPPEE I HAS A SUCCESS");},
        dataType: 'json'
    });

您必须发送一个 javascript 对象或一个表示 JSON 的字符串。但是将两者混合会导致数据格式错误。

【讨论】:

  • 我已经重写了这个问题。我知道我两次调用 stringify 但我已经摆脱了这个
  • @Overtone,根本不要调用 stringify。
  • 最初的要求是它作为 json 字符串传递,因此它作为服务器端的哈希返回,但数组也可以。非常感谢朋友。
猜你喜欢
  • 1970-01-01
  • 2022-10-18
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
相关资源
最近更新 更多