关于js返回值(return)输出undefine的问题
2013-08-25 20:05 杨泽川 阅读(1252) 评论(0) 编辑 收藏 举报这次给公司做一个天气插件的项目,需要用ajax来返回数据,在获取数据的过程中,遇到一个蛮有意思的问题:
以下getId()是用来向服务器发送请求,获取返回id值的,然后get()是将返回值输出到文本框中。
function getId()//获得城市id { var xmlhttp,id; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { id=xmlhttp.responseText; } } var Provin=document.getElementById("s_provin").value; var City=document.getElementById("s_city").value; xmlhttp.open("POST","getCityId.asp",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("Provin="+Provin+"&City="+City); alert(id); alert(id); return id; } function get() { document.getElementById("ty").value=getId(); }
在getId()中,我用了两个alert(id),第一个alert(id)输出undefine,第二个alert(id)得到期望的结果。
若是在getId()中直接
document.getElementById("ty").value=xmlhttp.responseText
则不会出现undefine的结果。
这个问题主要是因为
xmlhttp.open("POST","getCityId.asp",true);
此方法参数如下:xmlhttp.open(method,url,async)
其中async可选:true(异步)或 false(同步)
若我们把上述open方法改为false,则两次alert都是我们得到的结果。