【发布时间】:2018-10-08 09:19:19
【问题描述】:
我是 ajax 新手,正在尝试创建一个简单的 ajax 网页,但我遇到了这个问题
未捕获的类型错误:无法设置属性“onreadystatechange” 在 window.onload (test.js:4) 处未定义
这是我创建的 test.js 页面代码
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');
}
}
虽然这是名为 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>
同时,我正在尝试在 XAMPP 上运行它
【问题讨论】:
-
getXMLHttpRequestObject不返回任何内容,这意味着它返回undefined。该函数内部的ajax变量与外部的变量不同。 -
你的意思是我应该把 var ajax 放在 2 个函数之外
-
否,从函数中返回您要使用的对象。你这样称呼它
var ajax = getXMLHttpRequestObject();,这意味着它期望返回一些值。因此,您需要在返回所需对象的函数中添加return语句。 -
...例如,代替
ajax = new XMLHttpRequest();这样做:return new XMLHttpRequest(); -
谢谢@疯狂火车。已经可以修复了
标签: javascript ajax ajaxform