我想让我的代码更小、更紧凑,所以我尽我所知重构了它。现在,如果成功,Ajax 函数应该调用函数 someface
,如果失败,它应该引发错误。
//functions.js
//ajax constructor
var AJAX = (new XMLHttpRequest()) || (new ActiveXObject("Microsoft.XMLHTTP")) || (new ActiveXObject("Msxml2.XMLHTTP"));
AJAX.load = function (filename,call_function,async,method,string_toSend) {
//making default value for ajax.load method
method = typeof method !== 'undefined' ? method : 'GET';
async = typeof async !== 'undefined' ? async : true;
string_toSend = typeof string_toSend !== 'undefined' ? string_toSend : null;
if (AJAX.readyState == 4 && AJAX.status == 200) {
call_function;
}
AJAX.open(method,filename,async);
AJAX.send(string_toSend);
}
//general.js
//making AJAX object
var navigation = AJAX;
navigation.load("xml/content.xml",someface);
//not displaying ?? why ?
var someface = function (){
console.log('you are a someface');
}
<!-- scripts -->
<script src = "javascirpt/functions.js" ></script>
<script src = "javascirpt/general.js" ></script>
为了测试这一点,有 2 个 js 文件 ... functions.js
保存可调用函数,general.js
保存我可以使用的所有 Ajax 调用。
**问题是控制台中没有错误,也没有显示“you are some faces”。 **。
我梳理了最后 2-3 个小时的代码,但找不到错误。有人看到我看不到的东西吗?
最佳答案
嗯,您需要做很多修复。首先,您必须为readystatechange 事件创建一个监听器。然后,在定义 someface 之前,您将使用“someface”参数调用加载函数。结果是在 AJAX 上下文中,someface 是未定义的。
这是更新后的代码示例
var AJAX = (new XMLHttpRequest()) || (new ActiveXObject("Microsoft.XMLHTTP")) || (new ActiveXObject("Msxml2.XMLHTTP"));
AJAX.load = function (filename,call_function,async,method,string_toSend) {
//making default value for ajax.load method
method = typeof method !== 'undefined' ? method : 'GET';
async = typeof async !== 'undefined' ? async : true;
string_toSend = typeof string_toSend !== 'undefined' ? string_toSend : null;
AJAX.open(method,filename,async);
AJAX.send(string_toSend);
//event handler
AJAX.onreadystatechange = function() {
if (AJAX.readyState == 4 && AJAX.status == 200) {
call_function();
}
};
};
//we define someface BEFORE you call navigation.load();
var someface = function (){
console.log('you are a someface');
};
//general.js
//making AJAX object
var navigation = AJAX;
navigation.load("/test.php",someface);
关于javascript - 重构Ajax代码导致缺失错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893513/