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