2012-03-09 14 views
2

で動作しませんそれが私のために働くのに十分である。私は$.ajaxSetupにその設定を入れて、すべてのブラウザで動作させる必要がありました。AJAX呼び出しが働いていた何IE


私のプロジェクトは、HTMLとPHPを使用して作成した一種のチャットプログラムです。私が抱えている問題は、人がトップのXボタンを使ってウィンドウを閉じると、自分のプログラムが正常に動作するために実行する必要のあるPHPがあることです。だから私はいくつかの検索を行なったし、内のコードのこのビットになってしまった:

window.onbeforeunload = function(){ 
    $.post('./archive_onBeforeUnload.php?', {contact_id: contact_id}, function(){ 
    }).error(function(xhr, textStatus, error){ 
     console.log(xhr.statusText); 
     console.log(textStatus); 
     console.log(error); 
    }); 

} 

これはarchive_beforeUnload.phpを呼び出し、私はそれが必要なPHPの少量を実行します。 FireFox、Safari、Chromeではこれは正常に動作しますが、IEでは問題があるようです。 IEが実際に完全にコールを完了するのに十分な時間がないように見えるので、私のプログラムの残りの部分は少し混乱します。私はこれがそうのようにreturn文を追加使用しているの周りに持っている方法は:

window.onbeforeunload = function(){ 
    $.post('./archive_onBeforeUnload.php?', {async: 'true', cache: 'false', contact_id: contact_id}, function(){ 
    }).error(function(xhr, textStatus, error){ 
     console.log(xhr.statusText); 
     console.log(textStatus); 
     console.log(error); 
    }); 
    return 'I need to fix the timer here. Without this it doesn\'t work in IE'; 
} 

これはIEに実際にAJAX呼び出しを完了するのに十分な時間を与えているようです。問題は、ウィンドウが毎回閉じられる前に確認ウィンドウを作成することで、ユーザーにとっては迷惑になることです。 return文を必要とせずにIEでこれを動作させる方法はありますか?私はかなりウェブの周りを見てきましたが、私のために働くものをまだ見つけていません。

うまくいけば私は私の問題で十分に明確になっています。

編集:

思想私は多分私のPHPスクリプトを追加する必要があります

<?php 
session_start(); 
require_once('client_init.php'); 

$sqlRequeue = 'UPDATE S2G_CHAT_TRAVELLER_QUEUE SET'; 
$sqlRequeue .= ' isOpen = 1'; 
$sqlRequeue .= ' WHERE contactID='.$contact_id; 
$resRequeue = $conn_dd->query($sqlRequeue); 
$resRequeue->close; 

$_SESSION['s2g_chat_messages_shown'] = $default_messages_shown; 
?> 

答えて

1

私はこの問題は、それが完了する前に関数が戻るよう$.post()は、非同期であるということだと思います。

$.async()機能をdo the same call synchronouslyに使用できるようです。

編集:またはchange the default AJAX settings to be synchronousすることができます。

+0

うわー...私は '非同期'を真と偽の両方に設定しましたが、それは何もしませんでした。私も$ .ajaxSetup()を無駄に使用していましたが、リンク先の正確な投稿にも陥ります。今回私は運が良かったようで、うまくいきます。ありがとうございました。私は自分のコードを編集して、私にとって効果的なものを反映させます。 – Francis

+0

@Francis - 'async'は' $。post'のオプションではないと思いますが、 '$ .async'にしかありません。 –

+0

ああ ...私は知らなかった。このプロジェクト全体がAJAXで初めての作業ですので、かなりの学習経験です。 – Francis

関連する問題