【问题标题】:return value = undefined when i try to call a Ajax-function inside another Ajax-function当我尝试在另一个 Ajax 函数中调用 Ajax 函数时,返回值 = 未定义
【发布时间】:2016-07-04 12:10:56
【问题描述】:

我有一个带有 XML-HTTP-Request 的函数。不幸的是,当我调用此函数 getUserdataByToken() sendPost(wall) 工作时,我没有取回我的数据库结果。

我只想在我的第二个函数中包含返回值(数组),但该值始终是“未定义的”。有人可以帮我吗?

function getUserdataByToken() {

    var token = localStorage.getItem("token");
    var userDataRequest;

    //-AJAX-REQUEST
        var xhttp;
        if (window.XMLHttpRequest) {
            xhttp = new XMLHttpRequest();
        } else {
        // code for IE6, IE5
            xhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }

        var url= window.location.protocol+"//"+window.location.host+"/getuserdatabytoken";
        var param = "token=" + token;

        xhttp.onreadystatechange = function() {
            if (xhttp.readyState == 4 && xhttp.status == 200) {
                userDataRequest = JSON.parse(xhttp.responseText);

                if (userDataRequest.success === "false") {
                    warningMessage('homeMessage', false, userDataRequest.message);
                } else {
                    return userDataRequest;
                }
            }
        };

        xhttp.open("POST", url, true);
        xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhttp.send(param);
}

通过第二个函数 (AJAX) 的函数调用导致“userDataRequest”的值太“未定义”(函数 1 的返回)。

    function sendPost(wall) {

        var content;
        var token = localStorage.getItem("token");
        var userData = getUserdataByToken(); // PROBLEM

        console.log(userData); // "leads to undefined"
        alert(userData); // "leads to undefined"
… Ajax Call etc…

附:这是我在 stackoverflow 上的第一篇文章,我总是很感激提示。 谢谢!

【问题讨论】:

  • 您无法从异步调用中返回。 XMLHTTPREQUEST 是一个异步调用。它总是返回 undefined
  • 你需要将回调函数传递给当前函数
  • 这句话return userDataRequest; 毫无意义。将其替换为sendPost。
  • How do I return the response from an asynchronous call? 上面的链接已经回答了你的问题,我希望如此。

标签: javascript python ajax


【解决方案1】:

userdata 值仅存在于匿名 Ajax 回调函数中,您只能从那里返回它。那是没有意义的,因为它无处可归;当然,该值不会从getUserdataByToken 返回。不要忘记 Ajax 调用是异步的;当sendPost 调用getUserdataByToken 时,甚至都不会发出请求。

一般来说,你最好使用像 jQuery 这样的库来处理整个事情。除了使您的代码更简单之外,它还允许您使用诸如 Promises 之类的东西,这些东西明确旨在解决此类问题。

(而且,你真的需要支持 IE5 吗?你确定吗?)

【讨论】:

  • 对IE的评论加一!什么时候才能从世界上最后一台计算机上删除这些垃圾?
猜你喜欢
  • 1970-01-01
  • 2017-05-15
  • 2015-04-14
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
相关资源
最近更新 更多