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

时间:2018-12-18 13:47:49

标签: javascript httprequest response

我的代码在主函数中运行。我的代码的一部分是使用该函数之前定义的参数发出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();
}

希望您能帮助我找出问题所在。如果有更好的方法,请告诉我。我将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:3)

您的意思是异步回调吗?您将要等到服务器返回正确的状态和readyState。

更改此:

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)

答案 1 :(得分:0)

您的strInput函数中的DoWork()变量从哪里来?也许您忘了在某个地方定义它?例如:

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");