【问题标题】:Why can I not return responseText from an Ajax function? [duplicate]为什么我不能从 Ajax 函数返回 responseText? [复制]
【发布时间】:2010-09-17 02:15:15
【问题描述】:

这是我的 Ajax 函数的一部分。由于某种我无法弄清楚的原因,我能够alert() responseText 但不能return responseText。有人可以帮忙吗?我需要在另一个函数中使用该值。

http.onreadystatechange = function(){
    if( http.readyState == 4 && http.status == 200 ){
        return http.responseText;
    }
}

【问题讨论】:

  • 请参阅 [如何从 onreadystatechange=function() 调用的函数中返回变量](stackoverflow.com/questions/1955248/…) 和 [在 AJAX 中如何从 onreadystatechange = function () 内部检索变量](@987654322 @)。

标签: javascript ajax return alert responsetext


【解决方案1】:

您将无法处理从异步回调返回的返回值。您应该直接在回调中处理responseText,或者调用辅助函数来处理响应:

http.onreadystatechange = function () {
    if (http.readyState == 4 && http.status == 200) {
        handleResponse(http.responseText);
    }
}

function handleResponse (response) {
    alert(response);
}

【讨论】:

  • 你也可以让设置http.onreadystatechange的函数接受一个回调参数,然后调用它。见this example
  • @Matthew:是的,这是个好主意 :)
  • 但是警报与返回不同,您可以从 onreadystatechange 中发出警报,但是如果您在 handleResponse return response 中执行此操作,它不会将值返回给初始函数调用。
【解决方案2】:

怎么样:

function handleResponse (response) {
    return response;
}

对于同步和异步模式返回 undefined

【讨论】:

  • 这与问题有什么关系?
【解决方案3】:
function getdata(url,callback)
{
    var xmlhttp;
    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)
        {
         var result = xmlhttp.responseText;
         callback(result)
        }
      }
    xmlhttp.open("POST",url,true);
    xmlhttp.send();
}

发送一个回调函数名称作为该函数的第二个参数。 您可以获得该函数的响应文本。简单的。但是你不能直接从异步调用中返回任何东西。

【讨论】:

    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 2019-09-13
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2018-11-26
    相关资源
    最近更新 更多