Отправка всего массива (без дубликатов) в mongolab с помощью Javascript XMLHttpRequest
В моем коде у меня есть цикл for, который перебирает объекты в массиве (это, очевидно, не проблема). Далее мне удается отправить этот массив в базу данных:
var jsonObject = '{"object":' + '"' + array + '"' + '}';
var xhr = new XMLHttpRequest();
xhr.open("POST", MYAPIURL);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(jsonObject);
Проблема в том, что мне нужно проверить БД, если некоторые объекты в массиве уже существуют! Поэтому я подумал, что создание нового цикла for и открытие нового XMLHttpRequest для каждого из объектов в массиве поможет мне, но я не могу заставить его работать. С кодом ниже он просто отправляет последний объект в массиве столько раз, сколько объектов в массиве.
Код:
for(var i = 0; i < objectList.length; i++){
xhr = new XMLHttpRequest();
xhr.open("GET", MYAPIURL);
xhr.onreadystatechange = function(){
var response = xhr.responseText;
if(response.length === 0){
var jsonObject = '{"collectedobject":' + '{"objectname" : "' + objectList[i] + '", "weight" : 1}}';
xhr.open("POST", MYAPIURL);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(jsonObject);
} else {
for(var i = 0; i < response.length; i++){
var tempObject = response[i];
var newWeight = tempObject.collectedobject.weight + 1;
var updatedJson = '{"collectedobject":{"objectname" : "' + tempObject.collectedobject.objectname + '", "weight" : ' + newWeight + '}}';
xhr.open("PUT", MYAPIURL );
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(updatedJson);
}
}
}
xhr.send();
}
Я вроде нашел решение, но оно настолько плохое, насколько это возможно!
for(var i = 0; i < urls.length; i++){
var xhr = new XMLHttpRequest();
xhr.open("GET", MYAPI);
xhr.onreadystatechange = function(){
var response = JSON.parse(xhr.responseText);
if(response.length === 0){
for(var i = 0; i < urls.length; i++){
var jsonObject = '{"spider":' + '{"url" : "' + urls[i] + '", "weight" : 1}}';
alert("PostToDB: " + jsonObject);
xhr.open("POST", "MYAPI");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(jsonObject);
}
}
...
Что я сделал, так это добавил цикл перед открытием соединения с API/DB, а затем перебрал массив, содержащий URL-адреса, прежде чем продолжить с ними работу. Проблема в том, что это не работает без предупреждения. Кажется, предупреждение устанавливает тайм-аут или что-то. Если я удаляю предупреждение, единственный объект, размещаемый в БД, является последним в массиве (и да, я пробовал с несколькими массивами!)
У кого-нибудь есть идеи по поводу моей "новой" проблемы?