Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从AJAX返回结果_Javascript_Ajax - Fatal编程技术网

Javascript 从AJAX返回结果

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

我希望在XMLHttpRequest事务成功完成时返回响应数据。 对变量调用我的函数trashAnswer()时,我希望将返回的值赋给变量,并对其执行如下操作:

当我试图访问数据时,我可以看到resData总是未定义的。 请问我怎样才能解决这个问题

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
之类的操作。可能重复