【问题标题】:JavaScript callback function is not working in my case [duplicate]JavaScript回调函数在我的情况下不起作用[重复]
【发布时间】:2015-10-10 07:39:47
【问题描述】:

我有一个函数会返回一个 AJAX 响应并在另一个函数上使用它。这是我的代码:

function updateLoanApproval(answer){
    var password = document.getElementById("password").value;
    var usid; 
    getExistingId(function(success){
        if (success === 0){
            var usid = "No ID Available";
        } else {
            var usid = success; //To get the returning value
        }
    });

    alert(usid);

这里是 getExistingId() 的代码

function getExistingId(){
    var url =  "../../library/functions.php?action=getId";
    var uid;
    http.onreadystatechange = function(){
        if (http.status == 200 && (http.readyState === 4)){
            uid = http.responseText;
            if (uid == "No ID"){
                callback(0);
            } else {
                callback(id);
            }
        }
    }

    http.open("GET",url,true);
    http.send();
}

在我测试代码时,查询或 PHP 代码没有问题,所以我不会在此处包含它,但为什么 usid 总是返回未定义?

【问题讨论】:

  • 看起来你只需要在回调中移动你的警报。

标签: javascript ajax callback return return-value


【解决方案1】:

仔细看,您在 getEdiistingId() 函数中缺少回调参数。像下面这样:

function getExistingId(callback){
var url =  "../../library/functions.php?action=getId";
var uid;
http.onreadystatechange = function(){
    if (http.status == 200 && (http.readyState === 4)){
        uid = http.responseText;
        if (uid == "No ID"){
            callback(0);
        } else {
            callback(id);
        }
    }
}

http.open("GET",url,true);
http.send();

}

并将警报放入回调方法中。

function updateLoanApproval(answer){
    var password = document.getElementById("password").value;
    var usid; 
    getExistingId(function(success){
        if (success === 0){
            var usid = "No ID Available";
        } else {
            var usid = success; //To get the returning value
        }
        alert(usid);
    });

需要usid的方法:

function doMyTaskThatNeedUsid(usid)
{
    // do something.
}

并调用如下方法:

function updateLoanApproval(answer){
    var password = document.getElementById("password").value;
    var usid; 
    getExistingId(function(success){
        if (success === 0){
            var usid = "No ID Available";
        } else {
            var usid = success; //To get the returning value
        }

        // Calling method that need usid.
        doMyTaskTaskThatNeedUsid(usid);
    });

【讨论】:

  • 输出仍然未定义:(
  • 你有没有在 updateLoadApproval 方法中添加警报
  • 它现在可以工作,但是如果我希望变量 usid 的值在 updateLoanApproval 上的函数调用之外的函数周围工作,有什么可能的解决方案吗?
  • 看到您正在制作一个同步任务,该任务将在收到来自服务器的响应后运行。你必须在回调方法中调用你的目标方法。
  • @FelixKling 抱歉,我只是使用 ajax 的初学者 :(
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
  • 2013-12-09
  • 2016-07-16
  • 1970-01-01
相关资源
最近更新 更多