1

私のアプリは、jQuery を介して PHP ファイルとの間で多くの AJAX 呼び出しを行い、DB からデータを収集して返します。

Google Chrome でアプリをテストすると、すべて正常に動作し、AJAX 呼び出し失敗/フリーズ/タイムアウトすることはありません。ただし、IE9 でテストすると、AJAX 呼び出しは約 5 ~ 10% の確率でランダムに失敗し、約 30 ~ 45 秒間 IE がフリーズします。最終的には「フリーズ」し、呼び出しを正常に終了するか、単に失敗します。

これが私の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);

?>

ご覧のとおり、IE がフリーズしてもヒットしない 5 秒のタイムアウトを設定しました。また、IE のキャッシュを防ぐために、URL に日付/時刻の文字列を追加します。

これを引き起こしている可能性のあるアイデアはありますか?IEはただひどいのでしょうか、それとも私は何か間違ったことをしていますか?

4

0 に答える 0