javascript - 重构Ajax代码导致缺失错误

标签 javascript ajax

我想让我的代码更小、更紧凑,所以我尽我所知重构了它。现在,如果成功,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/

相关文章:

javascript - 当类在表单提交中相同时,按钮和跨度有什么区别。?

javascript - 焦点新标签的 Textarea Bootstrap 3 + AngularJS

javascript - JQuery $.ajax - 未调用 done()

javascript - 同步 AJAX 调用并非真正同步

javascript - 获取 ajax 函数的值(非异步)

c# - Asp.net MVC Ajax 调用不调用 Controller 方法

javascript - 在 Express JS 中使用全局翻译对象

javascript - TensorFlow.JS 整数乘法结果小数

javascript - 如何启动一个基本的 WebRTC 数据通道?

javascript - 为什么 aryB.forEach(aryA.push.bind(aryA)) 在 JavaScript 中不起作用?