Я пытаюсь создать личную страницу, посвященную запросу Ajax. Вот простой запрос.
window.onload = loaded;
function loaded(){
var xhr = new XMLHttpRequest();
xhr.open('GET', '/data_annotations', true);
xhr.onload = function(){
if(this.status == 200){
var data = xhr.responseText;
console.log(JSON.parse(data));
} else {
console.log("Rip");
}
}
xhr.send();
//httpreq.abort();
}
Вот файл node.js, с которого он запускается:
...
app.get('/', function(req, res, next){
console.log("Connected Successfully.");
res.render('home');
});
app.get('/data_annotations', function(req, res, next){
if(req.xhr || req.headers.accept.indexOf('json') > -1) {
const mc = mongo.MongoClient;
const url = 'mongodb://localhost:27017/';
const dbName = 'practiceMDB';
console.log("Got Data Annotations.");
mc.connect(url, { useNewUrlParser: true }, (err, client) =>{
if(err){
console.log(err);
} else {
const db = client.db(dbName);
data = db.collection('DataAnnotations');
data.find({}).toArray(function(err, data){
res.send(data)
});
client.close();
}
});
} else {
res.redirect('/');
}
});
app.listen(port, function(){
console.log('Server Started on Port '+port);
});
Я хочу, чтобы / data_annotaion запускался, только если это запрос Ajax. Если пользователь вводит в URL / data_annotations, он должен перенаправить их на домашнюю страницу. Когда я запустил это, я получил эти результаты:
Server Started on Port 3000
Connected Successfully.
Connected Successfully.
Это указывает (мне), что запрос ajax не регистрируется как запрос ajax, а регистрируется как обычный запрос. Далее я получаю эту ошибку:
Uncaught SyntaxError: Unexpected token < in JSON at position 0
Я полагаю, это из-за перенаправления. Запрос Ajax перенаправляется, он принимает ответ домашней страницы и не может его проанализировать (я считаю, что это происходит, потому что он не может анализировать текст HTML или текст строки - не цитируйте меня об этом). Как мне заставить Node JS зарегистрировать мой Ajax-запрос?
PS: я посмотрел на этот ответ, чтобы определить, является ли запрос Ajax или нет, но он всегда определяет мои запросы как не Ajax: https://stackoverflow.com/a/28540611/6804700