我的代码在主函数中运行。我的代码的一部分是使用该函数之前定义的参数发出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();
}
希望您能帮助我找出问题所在。如果有更好的方法,请告诉我。我将不胜感激。谢谢。
答案 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");