开发者

Ajax issues in IE 6, 7, 8

I am having Ajax issues with IE (6, 7 & 8).

I am using the Simple AJAX Code-Kit (SACK) v1.6.1 which works fine in FF, GC, Opera and Safiri.

In IE it throws the error:

System error: -1072896658.
Breaking on JS error on line 157 (self.response = self.xmlhttp.responseText;).

/* Simple AJAX Code-Kit (SACK) v1.6.1 */
/* 2005 Gregory Wild-Smith */
/* www.twilightuniverse.com */
/* Software licenced under a modified X11 licence,
 see documentation or authors website for more details */

function sack(file) {
        this.xmlhttp = null;

        this.resetData = function() {
                this.method = "POST";
                this.queryStringSeparator = "?";
                this.argumentSeparator = "&";
                this.URLString = "";
                this.encodeURIString = true;
                this.execute = false;
                this.element = null;
                this.elementObj = null;
                this.requestFile = file;
                this.vars = new Object();
                this.responseStatus = new Array(2);
        };

        this.resetFunctions = function() {
                this.onloading = function() { };
                this.onloaded = function() { };
                this.onInteractive = function() { };
                this.onCompletion = function() { };
                this.onerror = function() { };
                this.onFail = function() { };
        };

        this.reset = function() {
                this.resetFunctions();
                this.resetData();
        };

        this.createAJAX = function() {
                try {
                        this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (e1) {
                        try {
                                this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                        } catch (e2) {
                                this.xmlhttp = null;
                        }
                }

                if (! this.xmlhttp) {
                        if (typeof XMLHttpRequest != "undefined") {
                                this.xmlhttp = new XMLHttpRequest();
                        } else {
                                this.failed = true;
                        }
                }
        };

        this.setVar = function(name, value){
                this.vars[name] = Array(value, false);
        };

        this.encVar = function(name, value, returnvars) {
                if (true == returnvars) {
                        return Array(encodeURIComponent(name), encodeURIComponent(value));
                } else {
                        this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
                }
        }

        this.processURLString = function(string, encode) {
                encoded = encodeURIComponent(this.argumentSeparator);
                regexp = new RegExp(this.argumentSeparator + "|" + encoded);
                varArray = string.split(regexp);
                for (i = 0; i < varArray.length; i++){
                        urlVars = varArray[i].split("=");
                        if (true == encode){
                                this.encVar(urlVars[0], urlVars[1]);
                        } else {
                                this.setVar(urlVars[0], urlVars[1]);
                        }
                }
        }

        this.createURLString = function(urlstring) {
                if (this.encodeURIString && this.URLString.length) {
                        this.processURLString(this.URLString, true);
                }

                if (urlstring) {
                        if (this.URLString.length) {
                                this.URLString += this.argumentSeparator + urlstring;
                        } else {
                                this.URLString = urlstring;
                        }
                }

                // prevents caching of URLString
                this.setVar("rndval", new Date().getTime());

                urlstringtemp = new Array();
                for (key in this.vars) {
                        if (false == this.vars[key][1] && true == this.encodeURIString) {
                                encoded = this.encVar(key, this.vars[key][0], true);
                                delete this.vars[key];
                                this.vars[encoded[0]] = Array(encoded[1], true);
                                key = encoded[0];
                        }

                        urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
                }
                if (urlstring){
                        this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
                } else {
                        this.URLString += urlstringtemp.join(this.argumentSeparator);
                }
        }

        this.runResponse = function() {
                eval(this.response);
        }

        this.runAJAX = function(urlstring) {
                if (this.failed) {
                        this.onFail();
                } else {
                        this.createURLString(urlstring);
                        if (this.element) {
                                this.elementObj = document.getElementById(this.element);
                        }
                        if (this.xmlhttp) {
                                var self = this;
                                if (this.method == "GET") {
                                        totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
                                        this.xmlhttp.open(this.method, totalurlstring, true);
                                } else {
                                        this.xmlhttp.open(this.method, this.requestFile, true);
                                        try {
                                                this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1;")
                                                this.xmlhttp.setRequestHeader('User-agent' , 'Mozilla/4.0 (compatible) Naruki');

                                        } catch (e) { }
                                }

                                this.xmlhttp.onreadystatechange = function() {
                                        switch (self.xmlhttp.readyState) {
                                                case 1:
                                                        self.onloading();
                                                        break;
                                                case 2:
                                                        self.onloaded();
                                                        break;
                                                case 3:
                                                        self.onInteractive();
                                                        break;
                                                case 4:
                                                        if(self.xmlhttp.status==200){
                                                        **self.response = self.xmlhttp.responseText;**
                                                        //console.log(self.xmlhttp.responseText);

                                                        self.responseXML = self.xmlhttp.responseXML;
                                                        self.responseStatus[0] = self.xmlhttp.status;
                                                        self.responseStatus[1] = self.xmlhttp.statusText;
                                                        }
                                                        else{alert("Problem retrieving XML data")}


                                                        if (self.execute) {
                                                                self.runResponse();
                                                        }

                                                        if (self.elementObj) {
                                                                elemNodeName = self.elementObj.nodeName;
                                                                elemNodeName.toLowerCase();
                                                                if (elemNodeName == "input"
                                                                || elemNodeName == "select"
            开发者_运维百科                                                    || elemNodeName == "option"
                                                                || elemNodeName == "textarea") {
                                                                        self.elementObj.value = self.response;
                                                                } else {
                                                                        self.elementObj.innerHTML = self.response;
                                                                }
                                                        }
                                                        if (self.responseStatus[0] == "200") {
                                                                self.onCompletion();
                                                        } else {
                                                                self.onerror();
                                                        }

                                                        self.URLString = "";
                                                        /* These lines were added by Alf Magne Kalleland ref. info on the sack home page. It prevents memory leakage in IE */
                                                        delete self.xmlhttp['onreadystatechange'];
                                                        self.xmlhttp=null;
                                                        self.responseStatus=null;
                                                        self.response=null;
                                                        self.responseXML=null;

                                                        break;
                                        }
                                };

                                this.xmlhttp.send(this.URLString);
                        }
                }
        };

        this.reset();
        this.createAJAX();
}


This IE error is probably related to the content-type header of the response sent from the server, where the charset may be invalid, or not what IE is expecting. A typical cause would be setting the charset to UTF8 instead of UTF-8.

Related article:

  • System error: -1072896658 in IE


The error message means that the encoding of the response is not supported.

Check the encoding of the page that you are getting. Most browsers are a bit relaxed about the syntax and accepts an encoding like UTF8, while IE demands the correct form UTF-8.


if you have charset=UTF8 change it to charset=utf-8 it will help... to solve your issue.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜