Rails抛出“ REXML :: ParseException没有有效的根”异常

问题描述

|| 我有一个JavaScript对象,并使用Douglas Crockford \的JSON实用程序将其转换为JSON。发送后AJAX请求时,我得到:   REXML :: ParseException没有有效的根
REXML::ParseException (The document \"{\\\"name\\\":\\\"asda\\\",\\\"deadline\\\":\\\"May 24,2011\\\"}\" does not have a valid root):
我无法继续执行此错误。     

解决方法

发出AJAX请求时,您可能发送了错误的Content-Type标头。如果您以标头ѭ1make发出请求,Rails会尝试将您的请求正文解析为XML,然后您会收到该错误消息。相反,您将要使用
application/json
或其他内容类型,以便Rails不会尝试解析它。如果您使用的是jQuery,则这是$ .ajax中的
contentType
设置。     ,JSON不需要像XML那样具有根元素。尝试使用JSON.parse(json_string)而不是REXML进行解析。     ,见下面提到的json文件
{
    \"glossary\": {
        \"title\": \"example glossary\",\"GlossDiv\": {
            \"title\": \"S\",\"GlossList\": {
                \"GlossEntry\": {
                    \"ID\": \"SGML\",\"SortAs\": \"SGML\",\"GlossTerm\": \"Standard Generalized Markup Language\",\"Acronym\": \"SGML\",\"Abbrev\": \"ISO 8879:1986\",\"GlossDef\": {
                        \"para\": \"A meta-markup language,used to create markup languages such as DocBook.\",\"GlossSeeAlso\": [\"GML\",\"XML\"]
                    },\"GlossSee\": \"markup\"
                }
            }
        }
    }
}
这里的词汇表是根元素,与xml相似,它包含整个json,如下所示。
<!DOCTYPE glossary PUBLIC \"-//OASIS//DTD DocBook V3.1//EN\">
 <glossary><title>example glossary</title>
  <GlossDiv><title>S</title>
   <GlossList>
    <GlossEntry ID=\"SGML\" SortAs=\"SGML\">
     <GlossTerm>Standard Generalized Markup Language</GlossTerm>
     <Acronym>SGML</Acronym>
     <Abbrev>ISO 8879:1986</Abbrev>
     <GlossDef>
      <para>A meta-markup language,used to create markup
languages such as DocBook.</para>
      <GlossSeeAlso OtherTerm=\"GML\">
      <GlossSeeAlso OtherTerm=\"XML\">
     </GlossDef>
     <GlossSee OtherTerm=\"markup\">
    </GlossEntry>
   </GlossList>
  </GlossDiv>
 </glossary>
因此,我们可以说词汇表是根,并且只是xml或json中的一个标签。 因此,您必须在json文件中提供一个根元素,该根元素包含整个JSON文件。