Не удается получить JSON In Backbone collection
У меня есть следующий код Backbone.js
var List = Backbone.Collection.extend({
model: Item,
url: '/api/items',
});
а затем, на мой взгляд, я пытаюсь сделать следующее, чтобы получить JSON из API и заполнить модели
this.collection = new List();
var that = this;
this.collection.fetch({
success: function () {
that.render();
console.log('Fetch successful!');
},
error: function() {
console.log('Failed to fetch!');
}
});
Однако выборка не работает и ее запуск "Не удалось получить". сообщение. Может ли кто-нибудь увидеть что-нибудь, что я делаю неправильно? Если я перейду к api/items
в моем браузере, мне будет предложено загрузить JSON файл, чтобы он определенно был там, и когда я открою его новую строку с разделителями. Ниже приведен фрагмент кода api, который отправляет JSON
res.writeHead(200, {
'Content-Type': 'application/x-json-stream'
});
setTimeout(function () {
var i;
for (i=0; i<limit; i+=1) {
res.write(JSON.stringify(createRandomItem(i+skip, sort)) + '\n');
}
res.end();
}, 100 + Math.floor(Math.random() * 3000));
Кроме того, когда я использую инструменты разработчика для проверки запроса, который был отправлен в API, ответ, который я получаю, просто кажется случайным символом, и я получаю сообщение об ошибке "СинтаксисError: JSON.parse: Неожиданный символ"
eyJpZCI6IjAtd202MzNjYTF0Y3ZqOWs5Iiwic2l6ZSI6MTYsInByaWNlIjo5MzgsImZhY2
Ответы
Ответ 1
Ваш цикл записи ответа генерирует недопустимую строку json, потому что он просто конкатенирует объекты json.
Вы можете собрать все объекты в массиве и подстроить его так:
setTimeout(function () {
var i, data = [];
for (i=0; i<limit; i+=1) {
data.push(createRandomItem(i+skip, sort));
}
res.write(JSON.stringify(data));
res.end();
}, 100 + Math.floor(Math.random() * 3000));
Ответ 2
Обычно, когда вы получаете сообщение об ошибке JSON.parse: неожиданный символ, это указывает, что атрибуты JSON не имеют квалификацию с двойными кавычками, поэтому в основном JSON может выглядеть так:
"{ test: 1, testing: 2 }" *Invalid*
Или даже это:
"{ 'test': 1, 'testing': 2 }" *Invalid*
Вместо этого:
'{ "test": 1, "testing": 2 }' *Valid*
Или это:
"{ \"test\": 1, \"testing\": 2 }" *Valid*
Ответ 3
Прежде всего. У вас проблемы с конфигурацией сервера. Похоже, что ваш тип mime не установлен, и у вас есть (возможно, gzip) сжатие включено.
Используйте Google Chrome, чтобы перейти к URL-адресу, который обслуживает JSON. Браузер должен отображать JSON в виде обычного текста, не запрашивая его для его загрузки.
Затем добавьте расширение JSONView для Chrome. Перейдите к URL-адресу, который обслуживает JSON. Вы должны увидеть JSON в "хорошем" формате с соответствующими фигурными скобками.
После этого вернитесь в свое веб-приложение и проверьте. Если у вас все еще есть проблемы, отправьте информацию о своем веб-сервере (тип и версию) и любую другую специальную информацию. Мы пойдем оттуда.