ajax.responseText返回undefined

时间:2015-10-31 12:03:39

标签: php ajax

我正在使用stack exchange api从stackoverflow获取问题

function importQuestion(){//IMPORTS QUESTION
    $("import_status").innerHTML = "Validating Url ...";
    var url = $("stackoverflow_url").value;//User typed URL 
    var id = get_question_id_from_url(url);//Returns Question id from url
    var ajax_response = get_stackoverflow_question(id);//Returns json data form ajax api
    $("import_status").innerHTML = "Contacting stackoveflow.com ...";
    process_question_json(ajax_response);
    $("import_status").innerHTML = "Question is in place :D";
}

此函数请求服务器文件,其中联系堆栈交换api

function get_stackoverflow_question(id){
    debugger;
    var ajax = new XMLHttpRequest();
    ajax.onreadystatechange = function(){
        if(ajax.readyState == 4 && ajax.status == 200){
            response = ajax.responseText;
            return response;
        }
    }
    ajax.open("GET","/ajax_call_files/import_question.php?id=33449986",true);
    ajax.send();
}

import_question.php文件代码工作正常我已经仔细检查过它。它返回问题的json数据

get_stackoverflow_question(id);返回未定义的

如果我添加console.log(ajax.resonseText); 它在调用process_question_json(ajax_response);后在控制台中打印数据,并且由于ajax_response未定义,此函数抛出错误

我已使用async:false解决了此问题,但已弃用。有没有替代

我不会使用任何第三方库

ajax需要时间来获得响应的原因是什么?

之前我还没有遇到过这样的问题

1 个答案:

答案 0 :(得分:0)

AJAX是异步的。所以你必须使用回调。

function get_stackoverflow_question(id){
    debugger;
    var ajax = new XMLHttpRequest();
    ajax.onreadystatechange = function(){
        if(ajax.readyState == 4 && ajax.status == 200){

            callback(ajax.responseText);
        }
    }
    ajax.open("GET","/ajax_call_files/import_question.php?id=33449986",true);
    ajax.send();
}


get_stackoverflow_question(function(response) {
    // do your work here
    alert(response);
});