Запрос Firebase REST API POST завершается ошибкой: "недопустимые данные; не удалось проанализировать объект, массив или значение JSON…"

Я пытаюсь использовать Firebase REST API для сохранения материалов в моем хранилище данных. Я пробовал с jQuery и ванилью JS XHR. Однако оба дают одну и ту же ошибку. 403 плохая просьба и такой ответ:

недопустимые данные; не удалось проанализировать объект, массив или значение JSON. Возможно, вы используете недопустимые символы в именах.

вот мой пример JSON, я пытаюсь сохранить:

{
    "date": "2pm", 
    "name": "John"
}

вот пример ajax запрос:

jQuery.ajax({
    accept: "application/json",
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    url: "https://something.firebaseio.com/endpointnode.json",
    data: {
        "name": "John", 
        "date": "2pm"        
    },
});

ответ на запрос:

{
    "error" : "Invalid data; couldn't parse JSON object, array, or value. Perhaps you're using invalid characters in your key names."
}

как вы можете видеть, нет никаких специальных символов или что-то еще. Это должно сработать.

он отлично работает с CURL и Httpie. Я пытался проверить -v опция в Httpie для деталей. Я помещаю все заголовки, как Httpie. Ничто не помогало. Кстати, моя среда доступна для записи, поэтому не должно быть никаких проблем с разрешением.

есть идеи, как этого достичь?

спасибо.

2 ответов


указано, что AJAX запрос содержит json строку путем присвоения contentType собственность. Однако, разгона добавленные в запрос строку JSON. Чтобы сделать данные строкой json, просто вызовите JSON.stringify(params) метод.

следующий фрагмент кода может помочь вам решить проблему.

var data = {"name": "John", "date": "2pm"};
jQuery.ajax({
    accept: "application/json",
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    url: "https://something.firebaseio.com/endpointnode.json",
    data: JSON.stringify(data),
});

Ура.


ваши данные должны быть строкой, используйте JSON.stringify для преобразования объекта в строку:

data: JSON.stringify({"name": "John", "date": "2pm"})