我开发了一个适用于chrome和firefox的web应用程序.但是,当涉及到测试时间并且它在IE中无法正常工作时.它似乎没有真正得到请求?
这是Javascript代码:
function createXMLHttpRequest() { var xmlhttp = false; if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else if(window.ActiveXObject) { try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlhttp = false; } } } return xmlhttp; }; function checkForData(){ var target = document.getElementById('accordion'); var loading = document.getElementById('controls'); var xhr = createXMLHttpRequest(); loading.innerHTML = '<img src="../images/loading.gif" width=20 height=20 />Querying the Database'; xhr.open('GET','getData.PHP',true); xhr.send(null); xhr.onload = function(){ loading.innerHTML = '<a href="../classes/PHP/print.PHP" />Print Report</a><br/><br/><a href="../index.PHP" />HomePage</a><br/><a href="../classes/PHP/actionedClass.PHP" />Refresh</a><br/><a href="../classes/PHP/logout.PHP" />logout</a><br/>'; target.innerHTML = xhr.responseText; // addPrettyness(); }; xhr.onerror = function (){ target.innerHTML = 'Failed :('; }; } function addPrettyness(){ $(function() { var stop = false; $( "#accordion h3" ).click(function( event ) { if ( stop ) { event.stopImmediatePropagation(); event.preventDefault(); stop = false; } }); $( "#accordion" ) .accordion({ collapsible: true,header: "> div > h3"}); }); } function checkAgain(){ setInterval('checkForData()',30000); //Every 30 seconds run the check for new data script } function changeAction(action,actionChangeId){ xhr = new XMLHttpRequest(); if(action == 0){ var loading = document.getElementById('controls'); loading.innerHTML = '<img src="../images/loading.gif" width=20 height=20 />Sending to the Database'; xhr.open('GET','../classes/PHP/actionNo.PHP?actionChangeId='+actionChangeId,true); xhr.send(); xhr.onload = function(){ checkForData(); }; xhr.onerror = function(){ alert('Failed to change action... Try again please!'); }; }else if(action == 1){ xhr = new XMLHttpRequest(); var loading = document.getElementById('controls'); loading.innerHTML = '<img src="../images/loading.gif" width=20 height=20 />Sending to the Database'; xhr.open('GET','../classes/PHP/actionYes.PHP?actionChangeId='+actionChangeId,true); xhr.send(); xhr.onload = function(){ checkForData(); }; xhr.onerror = function(){ alert('Failed to change action... Try again please!'); }; } } function startEngine(){ checkForData(); //checkAgain(); } window.onload = startEngine;
如
here所述,Internet Explorer仅支持版本9以来的XMLHttpRequest对象的onload事件.
所以,对于IE 8及更低版本,你可以用老式的方式做到:
xhr.onreadystatechange = function() { //ready? if (xhr.readyState != 4) return false; //get status: var status = xhr.status; //maybe not successful? if (status != 200) { alert("AJAX: server status " + status); return false; } //Got result. All is good. loading.innerHTML = '<a href="../classes/PHP/print.PHP" />Print Report</a>' + '<br/><br/><a href="../index.PHP" />HomePage</a><br/>' + '<a href="../classes/PHP/actionedClass.PHP" />Refresh</a><br/>' + '<a href="../classes/PHP/logout.PHP" />logout</a><br/>'; target.innerHTML = xhr.responseText; return true; }