Javascript 从AJAX返回结果
我希望在XMLHttpRequest事务成功完成时返回响应数据。 对变量调用我的函数trashAnswer()时,我希望将返回的值赋给变量,并对其执行如下操作: 当我试图访问数据时,我可以看到resData总是未定义的。 请问我怎样才能解决这个问题Javascript 从AJAX返回结果,javascript,ajax,Javascript,Ajax,我希望在XMLHttpRequest事务成功完成时返回响应数据。 对变量调用我的函数trashAnswer()时,我希望将返回的值赋给变量,并对其执行如下操作: 当我试图访问数据时,我可以看到resData总是未定义的。 请问我怎样才能解决这个问题 var resData = trashAnswer({answerid:58,answererid:65,questionid:458}); 代码如下: //This function will trash answer object functi
var resData = trashAnswer({answerid:58,answererid:65,questionid:458});
代码如下:
//This function will trash answer object
function trashAnswer(param){
if (typeof param !== 'object' || param == null ) {
throw "trashAnswer(): Strictly expect valid object.";
}
var param = $.extend({answerid:0,answererid:0},param),
fd = new FormData();
fd.append('answerData',JSON.stringify(param));
fd.append('trash-answer',true);
var req = AJAX_REQEUST_OB();
req.open(bigPipe.formMethod.a,ajax.ac,true);
req.onload = function(){
if (req.readyState === req.DONE && req.status === 200) {
//ParseJSON is a custom function to check if response is a valid JSON...if its valid then then function will return response Data else return false
var Data = ParseJSON(req.responseText);
//process data...
var EvalData = !Data ? function(){
throw "Invalid JSON";
}:function(Data){
//do something...
return Data;
};
//call EvalData ****method
EvalData(Data);
}
}
//send request.
req.send(fd);
}
这是一个异步调用。当你做
trashAnswer({…})时代码>您正在触发请求,并且您的代码将继续执行。在将来的某个时候,您的请求可能会起作用。这里的“may”部分很重要:您的请求可能由于几个原因而失败,但您只检查HTTP状态(200,即“OK”响应)
一个简单的解决方案:
var-resData;
trashAnswer({回答者ID:58,回答者ID:65,问题ID:458});
//此函数将丢弃应答对象
函数trashAnswer(参数){
// ...
req.onload=函数(){
if(req.readyState==req.DONE&&req.status==200){
// ...
//在你的“//做点什么…”中:
resData=//此处显示结果。如果没有局部变量,
//它将更改全局设置(不推荐,请参阅下面的注释)
}
}
// ...
}
如果避免使用全局变量()。但我相信这是了解异步调用如何工作的一个很好的起点
您还可以使用承诺(包括异步/等待语法)。阅读这本书的一个良好开端是AJAX=异步JavaScript和XML。它是异步的
,因此您不能执行类似var resData=ajaxFunction()
使用Promise
或wait/async
之类的操作。可能重复