关于AJAX调用,得到返回值总为undefined的疑问
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于AJAX调用,得到返回值总为undefined的疑问相关的知识,希望对你有一定的参考价值。
现在有一个功能模块,需要实现在2秒内使用AJAX去获取2个页面内容,现在问题是,ajax函数在其函数内部,读取的xml.responseText很正常,但是一被主函数main调用上去后,就显示undefined,(个人感觉由于AJAX的异步获取数据的特性,需要等到客户端页面加载完毕后才可以返回值,而程序运行快,是不会等待什么的,所以中间有一个时间差导致MAIN函数中总是无法获取数值),由于是个AJAX新手,还请各位大虾帮忙,能说的详细点,不知道大家有什么解决方案。
<script type="text/javascript">
var ajax1;
//主函数整体思路
function main()
var ajaxhtml_1=ajax2("a.asp");
alert(ajaxHtml_1);//显示undefined
//此处为对ajaxHtml_1内容进行处理
var ajaxHtml_2=ajax2("b.asp");
alert(ajaxHtml_2);//显示undefined
//此处为对ajaxHtml_2内容进行处理
var SendTimer=window.setTimeout(main(),2000);
xml.send();
//ajax声明
function createXMLHttps()
var ret = null;
try ret = new ActiveXObject('Msxml2.XMLHTTP')
catch (e)
try ret = new ActiveXObject('Microsoft.XMLHTTP')
catch (ee) ret = null
if (!ret&&typeof XMLHttpRequest !='undefined') ret = new XMLHttpRequest();
return ret;
//被调用函数
function Ajax2(URL)
var ajax1;
var xml = createXMLHttps();
xml.open("POST",URL,true);//此处如果用false的话即同步,下面所有alert都显示undefined
xml.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xml.send();
xml.onreadystatechange = function()
if (xml.readyState == 4)
ajax1=xml.responseText;
alert(ajax1);//此处添加打印出来结果正常
alert(ajax1);//此处添加打印出undefined
return ajax1;
</script>
感谢大家的帮助,特别感谢 pzl7758 朋友帮忙想办法,问题已得到解决。
暂时没有办法能控制住在xml.onreadystatechange执行完毕后立即将xml.responseText值赋给ajax1,所以main函数执行调用到此处时,xml.responseText可能还未获取到数据就直接被返回到main函数中做处理了,因而会得到undefined.
解决办法:main函数中增加使用循环调用两个页面
function main()
for (var i=1;i<=2;i++)
Ajax2(web_list(i));
var SendTimer=window.setTimeout("main()",2000);
增加网址列表
function web_list(web_no)
switch (web_no)
case 1:
var chk_url="a.asp";
break;
case 2:
var chk_url="b.asp";
break;
return chk_url;
在被调用函数Ajax2中的xml.onredystatechange=function()中使用处理数据代码进行处理,同样使用循环,这样在其内部作处理,程序会在xml.responseText获取数据后再进行赋值处理,这样就不会返回undefined了。
if (xml.readyState == 4)
switch (URL)
case "a.asp":
数据处理过程。。。;
break;
case "b.asp":
数据处理过程。。。;
break;
而比较常用的做法是在onreadystatechange中的激发状态是“返回成功”时调用其他函数来处理返回结果。你可以想像成,当“返回成功”时,激发一个事件,这个事件用来处理结果。 参考技术A 之前没遇到过类似问题,也没试过,现在我去测一下,有问题可以给我留言
经测试,楼主这样写应该是不可行的,因为你不能保证在return ajax1时, xml.onreadystatechange已经激发并完成ajax1=xml.responseText;的动作,如果楼主能找出控制xml.onreadystatechange状态的办法还差不多,否则就只能交由系统去判断了.本回答被提问者采纳 参考技术B 是这样的,回调函数中尽管你申明的是匿名函数,但他内部的ajax1变量和你ajax2中声明的ajax1是两个独立的变量,除非你把这个ajax1提到所有的函数外面作为一个全局变量,否则你在回调函数中的改变是影响不了外面的。
以上是关于关于AJAX调用,得到返回值总为undefined的疑问的主要内容,如果未能解决你的问题,请参考以下文章
求解关于java ajax值一直都是undefined的问题
求解关于java ajax值一直都是undefined的问题
mvc从前台发送ajax请求得到的数据显示未定义(undefined),哪位帮忙看看