Ошибка синтаксического анализатора Jquery ajax в поле MongoDB _id

#jquery #ajax #json #mongodb

#jquery #ajax #json #mongodb

Вопрос:

Я вижу странную ошибку синтаксического анализатора (parsererror) при доступе к запросу, возвращающему JSON из документа MongoDB.

Этот документ возвращает загадочную ошибку синтаксического анализатора:

 {"data":{"first_name":"Ray","last_name":"Reinger","_id":4e9c0ed27763dfba37000001}}
 

Этот документ не возвращает ошибку:

 {"data":{"first_name":"Ray","last_name":"Reinger"}}
 

Используемый jquery:

 $("#fetch").click(function(){
  var url = "http://localhost:3333/people/4e9c0ed27763dfba37000001";

  $.ajax({
   url: url,
   method: 'GET',
   success: function(data, status){
     //do a thing with the data
   },
   complete:function(jqXHR, status) {
     console.log(status) //displays 'parsererror'
   }
  });

  return false;  
});
 

Сам запрос в порядке.
Возвращаемый mime-тип — ‘application / json’.
Все поля и значения заключены в кавычки.
_id является допустимым JSON, насколько я могу судить.

По сути, включение и выключение _id заставляет вещи работать.

Ответ №1:

При написании вышеупомянутого вопроса я увидел проблему. Публикуем ответ здесь для потомков и для всех, кто может столкнуться с той же проблемой.

Основная проблема заключается в том, что значение ID не было указано.

Я переопределял рендеринг идентификатора в ruby-mongo-driver по умолчанию (который использует вложенный хэш), и в качестве побочного эффекта строка идентификатора не была заключена в кавычки:

 class BSON::ObjectId
  def as_json(options ={})
    to_s
  end

  def to_json(*a)
    to_s.to_json
  end
end
 

Обратите внимание на использование *to_s.to_json* это правильно заключает идентификатор объекта в кавычки как строку JSON.