发布多次ajax javascript,nodejs,expressjs

时间:2014-05-28 04:29:21

标签: javascript ajax node.js

它是一个简单的待办事项列表,我想在javascript中使用ajax进行尝试。

app.js

var express=require('express');
var MongoClient=require('mongodb').MongoClient;
var db;
MongoClient.connect("mongodb://admin:pass@oceanic.mongohq.com:10070/todo",function(err,database){
    if(!err){
        console.log("We are connected");
        db=database;
    }
});
var app=express();
app.use(express.static(__dirname+'/views'));
app.use(express.bodyParser());
app.use(express.logger('dev'));
app.set('title','todo');
app.engine('jade',require('jade').__express);

// for home page of the website
app.get('/',function(req,res){
    res.render(index);
});
app.post('/additem',function(req,res){
    db.collection('todo').insert({'item':req.body.item},function(err,result){
    });
    console.log(req.body.item);
});
app.get('/list',function(req,res){
    db.collection('todo').find().toArray(function(err,items){
        res.send({'items':items});
    });
});
var server = app.listen(3000,function(){
    console.log("Listening on port %d",server.address().port);
});

的index.html

<html>
<head>
<script>
function dataSend(e){

    var listItem=document.getElementById('item').value;
    var xmlhttp;
    if(window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }
    else{
        xmlhttp=ActiveXObject("Microsoft.XMLHttp");
    }
    xmlhttp.open('post','/additem',true);   
    xmlhttp.setRequestHeader("Content-type","application/json;charset=UTF-8");
    xmlhttp.send(JSON.stringify({"item":listItem}));
}
function receive(){
    var xmlhttp;
    if(window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }
    else{
        xmlhttp=ActiveXObject("Microsoft.XMLHttp");
    }
    xmlhttp.onload=function(){
        var jlist=JSON.parse(xmlhttp.responseText);
        var arr=jlist.items;
        var parent=document.getElementById('items');
        var node;

        for(var i=parent.children.length;i<arr.length;i++){         
            var li=document.createElement('li');
            node=document.createTextNode(arr[i].item);
            li.appendChild(node);
            parent.appendChild(li);
        }
    }

    xmlhttp.open('get','/list',true);
    xmlhttp.send();
}
</script>
</head>
<body>
    <div id="container">
        <div id="input">
            <input id="item" type="text"/>
            <input type="button" value="Add" onclick="dataSend()"/>
        </div>
        <div id="items">
            <input type="button" value="current list" onclick="receive()"/>

        </div>
    </div>
</body>
</html>

index.jade

include index.html

问题是每2分钟大约相同的值再次发送到服务器,为什么它开心,以及如何防止这种情况? http://prntscr.com/3nae0e

1 个答案:

答案 0 :(得分:1)

我相信这是因为明确挂在请求上,即使您已经处理过,因为您没有发出回复。发送响应将从堆栈中删除请求,这应该不再发生。