日期:2014-05-16  浏览次数:20332 次

js重复使用xmlhttp结果只会发送一次数据
function up_data(data)
{
var data=encodeURIComponent(document.documentElement.innerHTML);
var xmlhttp=new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
var up_result;
up_result=xmlhttp.responseText;
}
}
xmlhttp.open("POST","http://www.memeda.pw/g.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("data="+data);

}

function get_web_by_get(url){

var xmlhttp=new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
var get_result;
get_result=xmlhttp.responseText;
}
}
xmlhttp.open("GET",url,true)
xmlhttp.send();
return get_result;
}

function get_web_by_post(url,post_data){

var xmlhttp=new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
post_result=xmlhttp.responseText;
}
}
xmlhttp.open("POST",url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(post_data);

return post_result;
}

var sdata;

sdata=get_web_by_get('/test.php?id=123');
up_data(sdata);



这样 但是其实只发送了一次test.php?id=123一次。后面的post都不会发送

而且就算sdata=get_web_by_get('/test.php?id=123');
sdata=get_web_by_get('/test.php?id=124');
也只会发送出去一次 求解。

------解决方案--------------------
这是为了防止恶意请求,异步请求不能不间断的发送,你想想啊,如果可以不间断的发送这些东西,那在前台随便写个for循环,一直发送请求,那服务器还不立马就挂掉了。。。

你试试使用setTimeout,设置隔一段时间再发送请求。

或者是请求的时候,添加一个random随机量试试。

反正你这样直接不间断的发,是不行的。
------解决方案--------------------
setTimeout(function(){
var sdata=get_web_by_get('/temp/test.php?id=123');
var sdata=get_web_by_get('/temp/test.php?id=124');
},5*1000);
setTimeout(function(){up_data(sdata);},5*1000);


这就是你说的延时了,你把所有的都延时到5秒之后了,那意思,还不是全部5秒之后执行的?
还是在同时发出的请求啊。

function aaa(id){
var sdata,
    speed = 1000;

sdata = get_web_by_get('/temp/test.php?id='+id);
setTimeout(function(){up_data(sdata);},speed);
setTimeout(function(){id++;aaa(id);},2*speed);
}
aaa(123);


你这样试试,这里我没有加入结束的代码,所有就会一直发送。

如果还不行,
get_web_by_get('/temp/test.php?id='+id+"&data="+(new Date().getTime()))

多试试吧。