我有以下代码(HTTPS AJAX),在IE 11中,这只在调试模式下运行良好。问题是在IE onclick事件中不会触发任何操作。但是如何调试呢?当我打开开发工具时,脚本运行得很好,console.log为空。我知道我有许多注释代码,但没有console()。我删除了这已经认为这是问题所在。 IE 11不接受它的原因是什么?
更新:我尝试了各种各样的东西,META标签,缓存控制等,但没有任何帮助。只有帮助添加Math.random()
来控制缓存。
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
不起作用
req.setRequestHeader('Cache-Control', 'no-cache');
不起作用
Math.random()
有效
<?php include "vars.php"; ?>
<script type="text/javascript">
function HandleGPIO(gpin,value) {
document.getElementById(gpin).innerHTML="Working";
document.getElementById(gpin).style.color="blue";
var req = createHttpRequest();
req.open("GET", "https://mysite.xy/gpio/gpioajax.php?gpio=" + gpin + "&value=" + value, false); //false ceka na vyrizeni
req.setRequestHeader("Content-Type", "text/html; charset=windows-1250");
req.send(null);
if(req.responseText == 0){
QueryGPIO(); //Query for updated values
return true;
}
else if(req.responseText == 1){
QueryGPIO(); //Query for updated values
return true;
}
else{
window.alert('Spatny navratovy kod pro AJAX, chyba: ' + req.responseText);
QueryGPIO(); //Query for updated values
return false;
}
}
function QueryGPIO() {
//var arr_inputs = ['5','21','27'];
var arr_inputs = <?php echo '["' . implode('", "', $pins_array_in) . '"]' ?>;
var arr_outputs = <?php echo '["' . implode('", "', $pins_array_out) . '"]' ?>;
//Query Inputs
for (var i = 0; i < arr_inputs.length; i++) {
(function(i) {
//alert(arr_inputs[i]);
var req = createHttpRequest();
req.open("GET", "https://mysite.xy/gpio/gpioajaxquery.php?gpio=" + arr_inputs[i], false); //false ceka na vyrizeni
req.setRequestHeader("Content-Type", "text/html; charset=windows-1250");
req.send(null);
//window.alert(req.responseText);
if(req.responseText == '0'){
document.getElementById(arr_inputs[i]).innerHTML='ON';
document.getElementById(arr_inputs[i]).style.color='green';
//document.getElementById(arr_inputs[i]).addEventListener("click", function() { HandleGPIO(arr_inputs[i], 1); }, false);
//document.getElementById(arr_inputs[i]).setAttribute('onclick','HandleGPIO('+arr_inputs[i]+',1)');
document.getElementById(arr_inputs[i]).onclick = function () { HandleGPIO(arr_inputs[i],1); };
}
else if(req.responseText == '1'){
document.getElementById(arr_inputs[i]).innerHTML='OFF';
document.getElementById(arr_inputs[i]).style.color='red';
//document.getElementById(arr_inputs[i]).setAttribute('onclick','HandleGPIO('+arr_inputs[i]+',0)');
document.getElementById(arr_inputs[i]).onclick = function(debug) {
if(debug === true) {
return [arr_inputs[i], 0];
}
else {
HandleGPIO(arr_inputs[i],0);
}
}
//document.getElementById(arr_inputs[i]).onclick = function() { HandleGPIO(arr_inputs[i],0); };
var temp = document.getElementById(arr_inputs[i]).onclick;
}
else{
window.alert('Spatny navratovy kod pro AJAX');
}
})(i)
}
//var arr_outputs = ['9','12'];
//Query Outputs
for (var i = 0; i < arr_outputs.length; i++) {
(function(i) {
var req = createHttpRequest();
req.open("GET", "https://mysite.xy/gpio/gpioajaxquery.php?gpio=" + arr_outputs[i] + "&r=" + Math.random(), false); //false ceka na vyrizeni
req.setRequestHeader("Content-Type", "text/html; charset=windows-1250");
req.send(null);
//window.alert(req.responseText);
if(req.responseText == '1'){
document.getElementById(arr_outputs[i]).innerHTML='ON';
document.getElementById(arr_outputs[i]).style.color='green';
//document.getElementById(arr_outputs[i]).setAttribute('onclick','HandleGPIO('+arr_outputs[i]+',0)');
//document.getElementById(arr_outputs[i]).addEventListener("click", function() { HandleGPIO(arr_outputs[i], 0); },true);
document.getElementById(arr_outputs[i]).onclick = function() { HandleGPIO(arr_outputs[i],0); };
}
else if(req.responseText == '0'){
document.getElementById(arr_outputs[i]).innerHTML='OFF';
document.getElementById(arr_outputs[i]).style.color='red';
//document.getElementById(arr_outputs[i]).setAttribute('onclick','HandleGPIO('+arr_outputs[i]+',1)');
//document.getElementById(arr_outputs[i]).addEventListener("click", function() { HandleGPIO(arr_outputs[i], 1); },true);
document.getElementById(arr_outputs[i]).onclick = function() { HandleGPIO(arr_outputs[i],1); };
}
else{
window.alert('Spatny navratovy kod pro AJAX');
}
})(i)
}
}
function createHttpRequest() {
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
http_request = new XMLHttpRequest();
}
else if (window.ActiveXObject) {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
return http_request;
}
</script>
<a id="27" style="cursor: pointer; color:red;">OFF</a>
<a id="27" style="cursor: pointer; color:red;">ON</a>
<a id="21" style="cursor: pointer; color:red;">OFF</a>
<a id="21" style="cursor: pointer; color:red;">ON</a>
<a id="5" style="cursor: pointer; color:red;">OFF</a>
<a id="5" style="cursor: pointer; color:red;">ON</a>
<a id="9" style="cursor: pointer; color:red;">OFF</a>
<a id="9" style="cursor: pointer; color:red;">ON</a>
答案 0 :(得分:1)
UPDATE2:经过数天的搜索后,问题就解决了。解决方案:req.setRequestHeader( "Pragma", "no-cache" );
在我的情况下禁用缓存并正常工作。我的假设是,脚本仅在调试模式下工作,因为启用了缓存并且在控制台模式下缓存被强制抑制。但是,默认情况下,HTTPS缓存应始终禁用,但显然存在问题。
答案 1 :(得分:0)
我有一个建议的解决方案
1:如果版本有效,请将运行模式设置为浏览器版本。
<meta http-equiv="X-UA-Compatible" content="IE=9"/>