在我的代码中,我有一个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的数组。问题是如果没有警报,这不起作用。警报似乎设置了超时或某事。如果我删除警报,发布到DB的唯一对象是数组中的最后一个对象(是的,我已尝试使用多个数组!)
任何人都有任何想法,我的&#34;新&#34;问题