2 Stimmen

Bitte helfen Sie mir, diesen JavaScript-Code aus "Ajax in Action" zu verstehen

Ich habe diesen Code im Buch "Ajax in Action" gesehen, und es gibt zwei Dinge, die ich nicht verstehen kann (bedenken Sie, dass ich gerade erst mit der Webprogrammierung begonnen habe und immer noch versuche zu verstehen, wie JavaScript funktioniert).

  1. Warum hat der Autor in Zeile 37 oder in der Funktion loadXMLDoc eine lokale Variable "var loader=this;" deklariert und diese dann in dem Aufruf "net.ContentLoader.onReadyState.call(loader);" verwendet, anstatt einfach "net.ContentLoader.onReadyState.call(this);" zu verwenden?

  2. Warum hat der Autor "net.ContentLoader.onReadyState.call(loader);" anstelle von "this.onReadyState();" verwendet?

    /\*
    url-loading object and a request queue built on top of it
    \*/
    
    /\* namespacing object \*/
    var net=new Object();
    
    net.READY\_STATE\_UNINITIALIZED=0;
    net.READY\_STATE\_LOADING=1;
    net.READY\_STATE\_LOADED=2;
    net.READY\_STATE\_INTERACTIVE=3;
    net.READY\_STATE\_COMPLETE=4;
    
    /\*--- content loader object for cross-browser requests ---\*/
    net.ContentLoader=function(url,onload,onerror,method,params,contentType){
      this.req=null;
      this.onload=onload;
      this.onerror=(onerror) ? onerror : this.defaultError;
      this.loadXMLDoc(url,method,params,contentType);
    }
    
    net.ContentLoader.prototype.loadXMLDoc=function(url,method,params,contentType){
      if (!method){
        method="GET";
      }
      if (!contentType && method=="POST"){
        contentType='application/x-www-form-urlencoded';
      }
      if (window.XMLHttpRequest){
        this.req=new XMLHttpRequest();
      } else if (window.ActiveXObject){
        this.req=new ActiveXObject("Microsoft.XMLHTTP");
      }
      if (this.req){
        try{
          var loader=this;
          this.req.onreadystatechange=function(){
            net.ContentLoader.onReadyState.call(loader);
          }
          this.req.open(method,url,true);
          if (contentType){
            this.req.setRequestHeader('Content-Type', contentType);
          }
          this.req.send(params);
        }catch (err){
          this.onerror.call(this);
        }
      }
    }
    
    net.ContentLoader.onReadyState=function(){
      var req=this.req;
      var ready=req.readyState;
      var httpStatus=req.status;
      if (ready==net.READY\_STATE\_COMPLETE){
        if (httpStatus==200 || httpStatus==0){
          this.onload.call(this);
        }else{
          this.onerror.call(this);
        }
      }
    }
    
    net.ContentLoader.prototype.defaultError=function(){
      alert("error fetching data!"
        +"\\n\\nreadyState:"+this.req.readyState
        +"\\nstatus: "+this.req.status
        +"\\nheaders: "+this.req.getAllResponseHeaders());
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X