ajax请求都是第一次的数据,ajax为什么请求第一次获取数据没值,而第二次以后都有值?...

用户提问

就是请求来的数据第一次点击不显示,第二次以后都能显示了,但是在显示代码中加入alert()语句后就能正常使用了,请问各位知道为什么吗

回答下面的问题,我写到了callback里面,要不然加个alert就能正常显示呢

abina2020能不能说清楚点,或者给点代码提示

推荐答案

这个是ajax 同步的问题 不知道 LZ 有没有用下面类似的方法

req.open("POST", url, false);

这里有个false,是异步,就是当ajax发送请求到其他页面,还没得到返回结果,就执行后面的代码,你把FALSE改成TRUE,就是要接受到返回值,才执行后面的代码

补充:你可以这样写

function talktoServer(url,subtxt){

var req = newXMLHttpRequest2();

//注册客户端回调函数

var callbackHandler = getReadyStateHandler2(req);

req.onreadystatechange = callbackHandler;

req.open("POST", url, false);

//对url进行编码

req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

//把字符串发送服务器

req.send("UserInfo="+subtxt);

}

//创建一个XmlHttp对象

function newXMLHttpRequest2() {

var xmlreq = false;

//如果支持XmlHttp则创建XmlHttp对象

if (window.XMLHttpRequest) {

xmlreq = new XMLHttpRequest();

} else if (window.ActiveXObject) {

// 是否支持XmlHttp ActiveX

try {

xmlreq = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e1) {

// 创建第一个ActiveX失败

try {

xmlreq = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e2) {

// 都不能创建对象,返回false

}

}

}

return xmlreq;

}

//服务器回调函数

function getReadyStateHandler2(Request) {

return function () {

if (Request.readyState == 4) {//已经加载

if (Request.status == 200) {//返回成功

//这里写所有处理代码 不要把方法写外面

} else {//出现错误,显示错误状态

//var hellomsg = document.getElementById("hellomsg");

//hellomsg.innerHTML = "ERROR: "+ req.status;

}

}

}

}

辅助答案

用户:旧旅故人.*

2010年08月20日

这类问题一般是在外面声明个变量,然后ajax返回数据时改变这个变量值,再然后再在执行ajax请求的下面一个块{}根据这个变量值进行操作。否则,ajax请求还来不及改变那个变量值,你的程序就执行到下面去了,所以你第一次执行后虽然你的值改变了,但是你的那个方法领先一步已经执行完毕,就会出现第一次不起作用,第二次之后才起作用的奇怪问题。

用alert就能执行就是因为alert延迟了执行时间,ajax请求来得及返回,你的变量也来得及赋新值。

用户:霍格茨向前跑

2010年09月02日

你没把那方法写在callback函数里吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值