如何在 HTTP 请求后调用回调方法

How to call a callback method after HTTP request

我的代码是 运行 在主函数中。我的代码的一部分是使用之前在函数中定义的参数发出 HTTP 请求,然后将响应写入新变量并稍后使用它。

我想在主函数之外使用 HTTP 请求排除这些步骤,而只是调用函数并将响应写入变量。

不幸的是我试过了,但是没有用。

Error: variable is undefined

我的代码:

function DoWork() {
    //some code

    var strResponseHttpRequest;
    strResponseHttpRequest = HttpRequest(strInput, function(strInput) {
    console.log(strInput);
    };

    //continue working with the variable 'strResponseHttpRequest'   
    //rest of my code
}


function HttpRequest(strInput, callBackMethod) {

    var objRequest = new XMLHttpRequest(); //New request object

    objRequest.onreadystatechange = function() {

    // Waits for correct readyState && status
    if (objRequest.readyState == 4 && objRequest.status == 200) callBackMethod(objRequest.responseText)
    }

    objRequest.open("get", "php/get-content.php?ID=" + strInput, true);
    objRequest.send();
}

希望大家帮我看看问题出在哪里。如果有更好的方法可以做到这一点,请告诉我。我将不胜感激。谢谢。

你是说异步回调吗?您需要等到服务器返回正确的状态和就绪状态。

改变这个:

objRequest.onload = function() { var strResponse = this.responseText; return strResponse; };

为此:

objRequest.onreadystatechange = function() {

    // Waits for correct readyState && status
    if (objRequest.readyState == 4 && objRequest.status == 200) callBackMethod(objRequest.responseText);
 };`

并将回调方法作为第二个参数传递给 HttpRequest(strInput, callbackMethod),如下所示:

strResponseHttpRequest = HttpRequest(strInput, function(responseText) {
    console.log(responseText);
});

同时添加 callbackMethod 作为参数,如下所示:

HttpRequest(strInput, callbackMethod)

DoWork() 函数中的 strInput 变量来自哪里?也许你忘了在某处定义它?例如:

function DoWork(strInput) {
    //some code

    var strResponseHttpRequest;
    strResponseHttpRequest = HttpRequest(strInput);

    console.log(strResponseHttpRequest);

    //continue working with the variable 'strResponseHttpRequest'
    //rest of my code
}

function HttpRequest(strInput) {
    function reqListener () {
        console.log(this.responseText);
    }
    var objRequest = new XMLHttpRequest(); //New request object

    objRequest.onload = function() {
        var strResponse = this.responseText;
        return strResponse;
    };

    objRequest.open("get", "php/get-content.php?ID=" + strInput, true);
    objRequest.send();
}

DoWork("yourIDvalue");