javascript - XMLHttpRequest in IE-7 - Stack Overflow

I'm creating XMLHttpRequest as follows:function checkDependencyFormFilledStatus(appName,formName){

I'm creating XMLHttpRequest as follows:

function checkDependencyFormFilledStatus(appName,formName){
    var xmlhttp;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET","checkFormDependency.action formName="+formName+"&applicationName="+appName,false);
    xmlhttp.send();
    var dependentFormEmptyStatus = Ext.JSON.decode(xmlhttp.responseText);
    alert(xmlhttp.responseText);
    return dependentFormEmptyStatus;
}

The response returned by the object is dependent on the database which the action class is using.

This works fine in Firefox 10.0.

But for IE7, it returns correct response only for the first time. And for the rest of the function calls, it returns the same response (no matter what changes we make in the database). It updates its response only when I close the tab and open it (not even on reloading the page).

How to make it work in IE 7?

I'm creating XMLHttpRequest as follows:

function checkDependencyFormFilledStatus(appName,formName){
    var xmlhttp;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET","checkFormDependency.action formName="+formName+"&applicationName="+appName,false);
    xmlhttp.send();
    var dependentFormEmptyStatus = Ext.JSON.decode(xmlhttp.responseText);
    alert(xmlhttp.responseText);
    return dependentFormEmptyStatus;
}

The response returned by the object is dependent on the database which the action class is using.

This works fine in Firefox 10.0.

But for IE7, it returns correct response only for the first time. And for the rest of the function calls, it returns the same response (no matter what changes we make in the database). It updates its response only when I close the tab and open it (not even on reloading the page).

How to make it work in IE 7?

Share Improve this question asked Jul 13, 2012 at 10:07 ShashwatShashwat 2,6687 gold badges42 silver badges58 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 5

Sounds like the response is being cached.

Add a psuedo-random string (e.g. a timestamp) to the end of the URI to cache burst.

you are simply having a caching issue with IE7, as it caches the XMLHttpRequest() after it created it and store it in its memory. even with subsequents xmlhttp=new XMLHttpRequest(); the variable don't get any assigment because it already has an instance (from your first xmlhttp=new XMLHttpRequest(); ) .

what you need to do is to invalidate and destroy your XMLHttpRequest request after every use.

you first create your XMLHttpRequest (for msie 7) like this:

function createXMLHttpRequest(){
    var xmlHttp = null;
    if(typeof XMLHttpRequest != "undefined"){
        xmlHttp = new XMLHttpRequest();
    }
    else if(typeof window.ActiveXObject != "undefined"){
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.4.0");
        }
        catch(e){
            try {
                xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
            }
            catch(e){
                try {
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(e){
                    xmlHttp = null;
                }
            }
        }
    }
    return xmlHttp;
}

so to create it each time in the function you want to use.

function checkDependencyFormFilledStatus(appName,formName){
    if(xmlHttp_global){
        xmlHttp_global.abort(); // abort the current request if there's one 
    }
    // Create the object each time a call is about to be made
    xmlHttp_global = createXMLHttpRequest();
    if(xmlHttp_global){
    xmlHttp_global.onreadystatechange = myCallbackFunction; // make you callback thing here
    xmlHttp_global.open("GET","checkFormDependency.action formName="+formName+"&applicationName="+appName,false);
    xmlHttp_global.send(null);
    }
}

in your callback ("onreadystatechange" function) you delete it after using it

function myCallbackFunction()
{
 if(xmlHttp_global && xmlHttp_global.readyState == 4){
 //do your thing here and ... or nothing 

var dependentFormEmptyStatus = Ext.JSON.decode(xmlhttp.responseText);
    alert(xmlhttp.responseText); // like this for example?

  xmlHttp_global = null; //delete your XMLHTTPRequest
 }

}

so IE 7 will find each time an empty reference and will have the need to recreate it again for each use.

if you don't want to create and delete it eacht time you simply play with some HTTP-Headers in your XMLHTTPRequest

xmlHttp_global.setRequestHeader("If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT");
xmlHttp_global.setRequestHeader("Cache-Control", "no-cache");

like suggested here

Another alternatives include:

  • Using POST method over GET method

    xmlHttp_global.open("POST","checkFormDependency.action",false); xmlHttp_global.setRequestHeader("Content-type","application/x-www-form-urlencoded"); // or another content type , its up to you xmlHttp_global.send("formName="+formName+"&applicationName="+appName);

  • Using a "dummy" variable in your query-String to burst out the cacher of IE(7,6)

    xmlHttp_global.open("GET","checkFormDependency.action formName="+formName+"&applicationName="+appName+"randomVar="+Math.Random(),false);

Links

  • XMLHTTPRequest cache in IE 7 and 6

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744083929a4555815.html

相关推荐

  • javascript - XMLHttpRequest in IE-7 - Stack Overflow

    I'm creating XMLHttpRequest as follows:function checkDependencyFormFilledStatus(appName,formName){

    9天前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信