我正在使用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需要时间来获得响应的原因是什么?
之前我还没有遇到过这样的问题答案 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);
});