Javascript 使用XMLhttprequest从函数返回值
我对JS非常陌生,尝试创建简单的页面,该页面将执行以下操作:Javascript 使用XMLhttprequest从函数返回值,javascript,jquery,ajax,Javascript,Jquery,Ajax,我对JS非常陌生,尝试创建简单的页面,该页面将执行以下操作: 获取某个服务器的IP地址 然后将get请求发送到此服务器 解析获取响应 将筛选的行添加到html页面上的表中 我可以通过浏览器控制台执行所有步骤,但由于某些原因,使用get函数移动到JS文件时,函数不会返回值 在下面的代码中,第6行将在控制台中打印undefined。 知道如何从函数getStatus返回“status”吗? 第5行和第6行之间是否应该有一些超时 谢谢 $("input[type='text']").keypress(
$("input[type='text']").keypress(function(event){
if(event.which === 13){
var address = $(this).val();
var urlStat = 'http://'+address+':666/bla?open=stats';
var status = getStatus(urlStat);
console.log(status);
$("input[type='text']").val('');
$('table').append("<tr><th>"+address+"</th><th><ul></ul></th><th></th></tr>");
}
});
function getStatus(url){
var xhr = new XMLHttpRequest;
xhr.open("GET", url);
xhr.send();
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var regexStatus = /(\w+ state:.*?)</g
var response = xhr.responseText;
var statuses = response.match(regexStatus);
console.log('Inside function getStatus'+statuses);
return statuses;
};
}
};
$(“输入[type='text'])。按键(函数(事件){
if(event.which==13){
var address=$(this.val();
var urlStat='http://'+address+':666/bla?open=stats';
var status=getStatus(urlStat);
控制台日志(状态);
$(“输入[type='text']”)val(“”);
$('table')。追加(“+address+”
”;
}
});
函数getStatus(url){
var xhr=新的XMLHttpRequest;
xhr.open(“GET”,url);
xhr.send();
xhr.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
var regexStatus=/(\w+state:.*)代码的问题是在发送请求后返回状态。这会产生一个小延迟。因为您立即请求返回值getStatus
,因此将得到未定义的。
您可以使用回调函数解决此问题:
function getStatus(url,callback){
var xhr = new XMLHttpRequest;
xhr.open("GET", url);
xhr.send();
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var regexStatus = /(\w+ state:.*?)</g
var response = xhr.responseText;
var statuses = response.match(regexStatus);
console.log('Inside function getStatus'+statuses);
if(callback) callback(statuses);
};
}
};
编辑
<> P>一个更好的解释和更长的解释,考虑检查< /P>可能的副本。
getStatus(url,function(statuses){
console.log(statuses);
});