我做了这么一个函数:
function ajax_get(url,fx){
xhr=new XMLHttpRequest();
xhr.open("GET",url,true);
xhr.send();
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
if(xhr.status==200){
fx(xhr.responseText);
}else{
alert("网络错误");
}
}
}
}
现在,我调用它两次,两次的功能分别是获取粉丝数和获取发言记录
ajax_get("user.php?action=homepage&info=getfans&id={$_GET['id']}",function(x){document.getElementById("fans").innerHTML=x;});
ajax_get("user.php?action=homepage&info=getvotes&id={$_GET['id']}", function(y){ajax_load(y);});
function ajax_load(json)
{
document.getElementById("net_info").innerHTML="";
obj=eval("("+json+")");
for(row in obj){
document.getElementById("net_info").innerHTML+=("");
}
}
第一次从服务器请求到的应该是6,第二次从服务器请求到的是一个JSON,实际运行下来,两次请求都请求到了正确的数据,并且第二次请求的数据总是按照我的设想正确的显示在网页上,但是第一次请求的数据每次加载网页都不会在网页上正确显示,有时什么也没有,有时显示的确是第二次请求的数据,这是为什么?
以下是完整的HTML
{tpl:nav.html}
{$userinfo['username']}
粉丝: 姓别:{$userinfo['gender']}
{$userinfo['msg']}
更多信息
{$userinfo['call']}的投票
{$userinfo['call']}的评论
正在加载……
11
{tpl:messagebox.html}
下两图是两次请求分别收到的数据:

下两图是实际运行结果:
有时无法获取粉丝数
有时粉丝数处显示的是第二次请求的JSON
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
xhr 声明时加 var。
否则 xhr 成为了全局变量,第二次请求时会覆盖 xhr 变量,导致第一次 readystatechange 时访问的是第二次的 xhr
不要养成声明变量不加 var 的坏习惯