我的应用程序通过 jQuery 对我的 PHP 文件进行了许多 AJAX 调用,这些文件从我的数据库中收集数据并将其返回。
在 Google Chrome 中测试应用程序时,一切正常,AJAX 调用永远不会失败/冻结/超时。但是,在 IE9 中进行测试时,AJAX 调用将随机失败大约 5-10% 的时间并冻结 IE 大约 30-45 秒。它最终“解冻”并成功完成呼叫或失败。
这是我的 jQuery:
var d = new Date();
$.ajax({
url: 'forms/settings/scripts/get-client.php?_='+d.getTime(),
dataType: 'json',
timeout: 5000,
type: 'POST',
async: false,
success: function(data){
// do something with data
},
error: function(x, textstatus, m){
if(textstatus==="timeout") {
alert("Error! Timed out in 5 seconds (forms/settings/scripts/get-client.php). Please try again.");
}
else {
alert("Error! There was a problem contacting (/forms/settings/scripts/get-client.php) for processing. Contact Support! "+textstatus);
}
}
});
这是get-client.php
上面的 AJAX 调用的内容:
<?php
define('INCLUDE_CHECK',true);
require '../../../php/db_pdo_connect.php';
// set JSON array to return
$jsonArr = array('errorsExist' => "N");
try {
// Begin a transaction, turning off autocommit
$PDO->beginTransaction();
// Select Client ID Length into JSON Array
$jsonArr["clientID_len"] = $PDO->query('SELECT clientID_len FROM tbl_global_settings WHERE id = 1')->fetchColumn();
// commit the queries
$PDO->commit();
}
catch (PDOException $e) {
// Echo back JSON
echo '{"appError": "'.$e->getMessage().'", "errorsExist":"Y"}';
// rollback the transaction
$PDO->rollBack();
// End all PHP processes
exit();
}
// Echo back JSON array
echo json_encode($jsonArr);
?>
正如你所看到的,我设置了 5 秒的超时时间,当 IE 冻结时,它永远不会被击中。此外,我将日期/时间字符串附加到 URL 以防止 IE 缓存。
关于可能导致这种情况的任何想法?IE只是很烂还是我做错了什么?