Rails выдает исключение «REXML :: ParseException не имеет действительного корня» - PullRequest
4 голосов
/ 24 мая 2011

У меня есть объект JavaScript, и я преобразовал его в JSON, используя Утилита JSON Дугласа Крокфорда .При отправке почтового запроса AJAX я получаю:

REXML :: ParseException не имеет действительного корня

REXML::ParseException (The document "{\"name\":\"asda\",\"deadline\":\"May 24, 2011\"}" does not have a valid root):

Я не могу продолжить эту ошибку.

Ответы [ 3 ]

9 голосов
/ 25 января 2012

При отправке запроса AJAX вы, вероятно, отправили неправильный заголовок Content-Type. Если вы делаете запрос с заголовком Content-Type: application/xml, Rails попытается проанализировать тело вашего запроса как XML, и вы получите это сообщение об ошибке. Вместо этого вы захотите использовать application/json или другой тип контента, чтобы Rails не пытался его проанализировать. Если вы используете jQuery, это настройка contentType в $. Ajax .

0 голосов
/ 24 мая 2011

JSON не требует наличия корневого элемента, как это делает XML. Попробуйте проанализировать его с помощью JSON.parse (json_string) вместо REXML.

0 голосов
/ 24 мая 2011

См. Нижеприведенный файл 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"
                }
            }
        }
    }
}

Здесь глоссарий - это корневой элемент, который охватывает весь json аналогично xml, как показано ниже.

<!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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...