2014-10-04 62 views
0

以下是我知道的向XMLHttpRequest的请求处理程序添加参数的方法。将EXTRA参数添加到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"); 
     } 
    } 
} 

在这里,我打电话不带任何参数的处理程序,但我在代码的evtXHR参数越来越XMLHttpRequestProgressEvent类型的对象。
现在我有两个问题。

  1. 当我进行无参数调用时,我如何得到evtXHR参数?
  2. 如何添加一个参数以及evtXHR这样我仍然可以得到XMLHttpRequestProgressEvent对象?

所以,我想是这样的:

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

回答

0
  1. 你是不是在打电话。 XHR对象是。响应接收事件,XHR对象正在调用handler函数。
  2. 不要试图将它作为参数传递。改为使用闭包。

这样的:

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 
} 
+0

我知道可以做,在-事实上,我已经在做了。虽然我想知道它是否可以在没有全局变量的情况下完成。 – Adze 2014-10-04 09:01:19

+0

是的。你把它全部放在一个函数中(例如创建'xhr'对象的函数)。 “myData”没有理由成为全球性的。 – Quentin 2014-10-04 09:21:20

+0

是的,这是一个很好的解决方法!但是没有办法像我提到的那样做一些事情?像传递一个额外的参数方法来做到这一点? – Adze 2014-10-04 10:10:59

相关问题