Javascript 阿贾克斯&x2019;s Onreadystatechange返回未捕获的类型错误
我是ajax的新手,正在尝试创建一个简单的ajax网页,但我遇到了这个问题 未捕获的TypeError:无法设置的属性“onreadystatechange” window.onload未定义(test.js:4) 这是我创建的test.js页面代码Javascript 阿贾克斯&x2019;s Onreadystatechange返回未捕获的类型错误,javascript,ajax,ajaxform,Javascript,Ajax,Ajaxform,我是ajax的新手,正在尝试创建一个简单的ajax网页,但我遇到了这个问题 未捕获的TypeError:无法设置的属性“onreadystatechange” window.onload未定义(test.js:4) 这是我创建的test.js页面代码 window.onload = function(){ 'use strict'; var ajax = getXMLHttpRequestObject(); ajax.onreadystatechange = function(){ if(aja
window.onload = function(){
'use strict';
var ajax = getXMLHttpRequestObject();
ajax.onreadystatechange = function(){
if(ajax.readyState == 4){
if((ajax.status >= 200 && ajax.status < 300) || (ajax.status == 304)){
document.getElementById('output').innerHTML = ajax.responseText;
}else{
document.getElementById('output').innerHTML = 'Error ' + ajax.statusText;
}
}
};
document.getElementById('btn').onclick = function(){
ajax.open('GET', 'resources/test.txt', true);
ajax.send(null);
};
}
function getXMLHttpRequestObject(){
var ajax = null;
if(window.XMLHttpRequest){
ajax = new XMLHttpRequest();
}else if(window.ActiveXObject){
ajax = new ActiveXObject('MSXML2.XMLHTTP.3.0');
}
}
window.onload=function(){
"严格使用",;
var ajax=getXMLHttpRequestObject();
ajax.onreadystatechange=函数(){
if(ajax.readyState==4){
if((ajax.status>=200&&ajax.status<300)| |(ajax.status==304)){
document.getElementById('output').innerHTML=ajax.responseText;
}否则{
document.getElementById('output').innerHTML='Error'+ajax.statusText;
}
}
};
document.getElementById('btn')。onclick=function(){
open('GET','resources/test.txt',true);
send(null);
};
}
函数getXMLHttpRequestObject(){
var ajax=null;
if(window.XMLHttpRequest){
ajax=新的XMLHttpRequest();
}else if(window.ActiveXObject){
ajax=newActiveXObject('MSXML2.XMLHTTP.3.0');
}
}
这是一个名为test.html的html页面
<!DOCTYPE html>
<html>
<head>
<title>Ajax test</title>
</head>
<body>
<div><button type="button" id="btn">Run the test</button><br>
<p id="output"></p>
</div>
<script src ="js/test.js"></script>
</body>
</html>
Ajax测试
运行测试
同时,我试图在XAMPP上运行它,我刚刚在两个函数的末尾返回了变量ajax >
window.onload=function(){
>"严格使用",;
>var ajax=getXMLHttpRequestObject();
>ajax.onreadystatechange=函数(){
>if(ajax.readyState==4){
>if((ajax.status>=200&&ajax.status<300)| |(ajax.status==304)){
>document.getElementById('output').innerHTML=ajax.responseText;
>}其他{
>document.getElementById('output').innerHTML='Error'+ajax.statusText;
> }
> }
> };
>document.getElementById('btn')。onclick=function(){
>open('GET','resources/test.txt',true);
>send(null);
> };
>**返回ajax**
> }
>函数getXMLHttpRequestObject(){
>var ajax=null;
>if(window.XMLHttpRequest){
>ajax=新的XMLHttpRequest();
>}else if(window.ActiveXObject){
>ajax=newActiveXObject('MSXML2.XMLHTTP.3.0');
> }
>**返回ajax**
> }
getXMLHttpRequestObject
不返回任何内容,这意味着它返回未定义的
。该函数内部的ajax
变量与外部的变量不同。您的意思是我应该将var ajax放在2个函数的外部。否,从函数返回要使用的对象。您这样调用它var ajax=getXMLHttpRequestObject()代码>,这意味着它希望返回一些值。因此,您需要向返回所需对象的函数添加return
语句……例如,而不是ajax=new-XMLHttpRequest()代码>改为执行此操作:返回新的XMLHttpRequest()代码>谢谢@Crazy Train。我们已经能够修复它了
window.onload = function(){
> 'use strict';
> var ajax = getXMLHttpRequestObject();
> ajax.onreadystatechange = function(){
> if(ajax.readyState == 4){
> if((ajax.status >= 200 && ajax.status < 300) || (ajax.status == 304)){
> document.getElementById('output').innerHTML = ajax.responseText;
> }else{
> document.getElementById('output').innerHTML = 'Error ' + ajax.statusText;
> }
> }
> };
> document.getElementById('btn').onclick = function(){
> ajax.open('GET', 'resources/test.txt', true);
> ajax.send(null);
> };
> **return ajax;**
> }
> function getXMLHttpRequestObject(){
> var ajax = null;
> if(window.XMLHttpRequest){
> ajax = new XMLHttpRequest();
> }else if(window.ActiveXObject){
> ajax = new ActiveXObject('MSXML2.XMLHTTP.3.0');
> }
> **return ajax**
> }