返回属性(XHR)未定义
undefined on return property (XHR)
未定义返回XHR帖子。我不知道问题出在哪里
var d=new XMLHttpRequest();
var data;
d.open("POST",b,!0);
d.setRequestHeader("Content-type","application/json");
d.onreadystatechange=function(){
if(d.readyState==4){
var data={status:d.status,text:d.responseText};
return data.text; // this return undefined
}
};
d.send(c);
首先你为什么要从onreadystatechange返回一些东西?Onreadystatechange是一个回调函数,很可能如果你显式地使用它(即var foo = d.onreadystatechange();),你将没有任何响应尚未处理。你是如何使用那个返回值的?
第二,我不确定你的语法是正确的条件"4==d.readystate;"我可能错了,但我认为你必须使用if语句。
第三,你还应该确保d.status==200。如果d.readystate == 4,则请求已经完成,但不一定成功。您仍然需要检查以确保请求的HTTP状态为200 OK。
如果我没说清楚,我道歉。整件事都是在手机上写的。如果你需要一些例子,请告诉我。希望这对你有帮助!因为你正在做一个异步XMLHttpRequest,你不能从onreadystatechange
回调返回值。相反,您必须在回调中使用结果,或者调用其他函数并将结果传递给它。从该回调返回一个值,只是将其返回到XHR引擎的内部—它永远不会进入您的代码。
此外,您需要确保readyState === 4
(这意味着请求已经完成)和您有一个成功的响应代码,否则您需要处理一个错误代码。下面我们来看看如何:
var d = new XMLHttpRequest();
d.open("POST", url, true);
d.setRequestHeader("Content-type","application/json");
d.onreadystatechange = function(){
// if request has finished
if (this.readyState === 4){
// if request finished successfully
if (this.status === 200) {
// process this.responseText here
} else {
// process this.status error response code here
}
}
}
};
d.send(data);
同样,一个字符变量并不能使你的代码更具可读性。强烈建议对所有变量使用有意义的名称。可以在部署之前使用最小化器缩短代码,同时保留可读版本以供编辑和维护。
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- $window.ga在AngularJS事件中未定义
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 如何消除代码中的未定义和其他问题
- 未捕获的ReferenceError:$未定义
- this.router在AngularJS 2中未定义
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 节点fs.stat名称未定义
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- Jquery未定义函数正在停止其他操作
- AngularJS指令出错-无法读取属性'编译'的未定义
- 这.SOMETHING 总是返回未定义的 - extjs
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- 未定义的响应来自侧边栏小工具中 XHR 的文本
- 返回属性(XHR)未定义