将EXTRA参数添加到XMLHttpRequest Handler

时间:2014-10-04 07:32:54

标签: javascript xmlhttprequest

以下是我知道为XMLHttpRequest请求处理程序添加参数的方法。

var request = new XMLHttpRequest();

function ABC() {
    if (request) {
            request.open('GET', url, true);
            request.onreadystatechange = function() { handler(param1, param2); };
            request.send();
    }
}

function handler(param1, param2) {
    if (request.readyState == 4) {
        if (request.status == 200) {
            //do something on success
        } else {
            alert("Invocation Errors Occured");
        }
    }
}

这很好,很好。但是,请看下面的代码。

var request = new XMLHttpRequest();

function ABC() {
    if (request) {
            request.open('GET', url, true);
            request.onreadystatechange = handler;
            request.send();
    }
}

function handler(evtXHR) {
    if (request.readyState == 4) {
        if (request.status == 200) {
            //do something on success
        } else {
            alert("Invocation Errors Occured");
        }
    }
}

在这里,我在没有任何参数的情况下调用处理程序,但我在代码的XMLHttpRequestProgressEvent参数中获得了evtXHR类型的对象。
现在我有两个问题。

  1. 当我进行无参数调用时,如何获取evtXHR参数?
  2. 如何与evtXHR一起添加参数,以便我仍然可以获得XMLHttpRequestProgressEvent个对象?
  3. 所以,我想要这样的事情:

    function handler(evtXHR, myParam) {
        if (request.readyState == 4) {
            if (request.status == 200) {
                //do something on success
            } else {
                alert("Invocation Errors Occured");
            }
        }
    }
    

1 个答案:

答案 0 :(得分:0)

  1. 你没有打电话。 XHR对象是。响应接收事件,XHR对象正在调用handler函数。
  2. 不要试图将其作为论据传递。改为使用封闭。
  3. 这样:

    var myData = 1234;
    
    request.onreadystatechange = handler;
    
    function handler(event) {
         alert(myData); // Use myData from the wider scope instead of trying to pass it as an argument
    }