INVALID_STATE_ERR: DOM Exception 11

后端 未结 4 1859
隐瞒了意图╮
隐瞒了意图╮ 2021-02-05 11:14

I\'m developing a simple auxiliary class to send requests using XmlHttpRequest (code below). But I cant make it work. At google chrome, for example, I get the error INVALI

4条回答
  •  故里飘歌
    2021-02-05 11:47

    Regardless, you can simplify your SendRequest method by creating a mixin instead of using a giant switch.

    XRequest.prototype.SendRequest = function(params) {
        var defaultParams = {
            async:    true,
            type:     "",
            url:      "",
            username: "",
            password: "",
            body:     null,
            success:  null,
            failure:  null
        };
    
        for ( var i in defaultParams ) {
            if ( defaultParams.hasOwnProperty(i) && typeof params[i] == "undefined" ) {
                params[i] = defaultParams[i];
            }
        }
    
        var that = this;
        this.XHR.onreadystatechange = function() {
            if ( that.XHR.readyState == 4 ) {
                if ( that.XHR.status == 200 || that.XHR.status == 0 ) {
                    if ( params.success ) {
                        params.success(that.XHR);
                    }
                } else {
                    if ( params.failure ) {
                        params.failure();
                    }
                }
            }
        };
    
        this.XHR.open(
            params.type, parms.url, params.async, params.username, params.password
        );
    
        // It doesn't make sense to have a for/switch here when you're only handling
        // one case
        if ( params.setHeader ) {
            var h = params.setHeader.split(":");
            if ( h.length == 2) {
                this.SetRequestHeader(h[0], h[1]);
            }
        }
    
        this.XHR.send(params.body);
    };
    

    Also be careful: your existing for..in loops have two distinct problems:

    1. You're not using var and causing a global to be created: for (e in args) should be for (var e in args)
    2. Whenever you use for..in, you should always check to make sure that each key is a direct member of the object, and not something inherited inadvertently through prototype

    .

    for ( var i in obj ) {
        if ( obj.hasOwnProperty(i) ) {
            // do stuff here
        }
    }
    

提交回复
热议问题