使用Javascript XMLHttpRequest将整个数组(不重复)发布到mongolab

时间:2015-01-30 09:33:23

标签: javascript for-loop xmlhttprequest mlab

在我的代码中,我有一个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;问题

0 个答案:

没有答案