zoukankan      html  css  js  c++  java
  • 关于js返回值(return)输出undefine的问题

    这次给公司做一个天气插件的项目,需要用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都是我们得到的结果。

  • 相关阅读:
    框架集。样式表
    2017.11.23知识点整理
    HTML5的标签
    HTML5大体概括截图
    2017.11.21 通用标签及属性
    2017.11.21 课程随记
    JavaScript数组
    JavaScript语句
    javascript基础知识
    不用alert提示的非空表单验证
  • 原文地址:https://www.cnblogs.com/yangzec/p/3281171.html
Copyright © 2011-2022 走看看