javascript - 无法返回 xmlhttp.responseText?

标签 javascript xml responsetext

对这里的问题有什么见解吗?运行时,代码不会产生任何结果。页面上没有显示任何文字。如果我取消注释行,则会显示 xml 结果。为什么我不能将它作为变量传递? (我确实收到了警报,仅供引用,因此正在调用该函数。)

 <script type="text/javascript">
           function loadXMLDoc(parameterString)
               {
                   alert("loadXMLDoc has been called.");
                   var xmlhttp = new XMLHttpRequest();

                   xmlhttp.onreadystatechange=function()
                   {
                       if (xmlhttp.readyState==4 && xmlhttp.status==200)
                       {

                  //document.getElementById("xmlResults").innerHTML = xmlhttp.responseText;
                               alert("Got the response!");
                               return xmlhttp.responseText;
                           }
                           else document.getElementById("xmlResults").innerHTML = "No results."
                       }

                       var url =  "http://metpetdb.rpi.edu/metpetwebsearchIPhone.svc?" + parameterString;
                   xmlhttp.open("GET",url,true);
                   xmlhttp.send();
               }
        </script>



        <script type="text/javascript">

       $(function(){

        //left out irrelevant code which creates the var "parameters"

         var results = loadXMLDoc(parameters);

         document.getElementById("xmlresults").innerHTML = results;

       });


       </script>


<body>
<div id="xmlResults"></div>
</body>

最佳答案

根据定义,异步调用执行实际工作,而不会让调用者等待结果。您确实需要使用回调函数,例如:

<script type="text/javascript">
  function loadXMLDoc(parameterString, onComplete, onError) {
    alert("loadXMLDoc has been called.");
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState==4) {
        if(xmlhttp.status==200) {
          //document.getElementById("xmlResults").innerHTML = xmlhttp.responseText;
          alert("Got the response!");
          onComplete(xmlhttp.responseText);
        } else {
          onError();
        }
      }
    };

    var url =  "http://metpetdb.rpi.edu/metpetwebsearchIPhone.svc?" + parameterString;
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
  }
</script>

<script type="text/javascript">
  $(function(){
    //left out irrelevant code which creates the var "parameters"
    loadXMLDoc(parameters, function(results) {
      // this function will be called if the xmlhttprequest received a result
      document.getElementById("xmlresults").innerHTML = results;
    }, function() {
      // this function will be called if xhr failed
      document.getElementById("xmlResults").innerHTML = "No results.";
    });
  });
</script>

顺便说一句,由于您已经在使用 jQuery,因此您应该使用 its builtin AJAX functionality而不是构建您的自定义 xmlhttprequest。

关于javascript - 无法返回 xmlhttp.responseText?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369839/

相关文章:

javascript - 当我 `Object.assign` 到 javascript 中的原始类型时会发生什么?

c# - 遍历 XML 文档

php - AJAX responseText 在对 .php 的 GET 请求后未定义

javascript - 获取 OpenLayers GET 请求的 responseText JSON 元素

xml - magento 仅使用 local.xml 从家中删除面包屑

jquery - AJAX 响应文本未定义

javascript - Angularjs:为什么 1 个绑定(bind)有 3 个观察者?

javascript - 为什么 Chrome 在使用 "fetch()"时发送空正文,但 Edge 正确发送正文

javascript - 为什么我的 ejs 不在重定向时呈现?

java - 比较两个 xml 文件中的特定元素 -- 在 java 中