2011-07-18 21 views
0

ajax呼び出しが成功すると開く必要のあるポップアップウィンドウを持つクリック機能があります。私は非同期:falseを設定しようとしました。私はajax呼び出しでポップアップを入れようとしましたが、ポップアップがブラウザによってブロックされます。私の最後の試みは、ajax呼び出しが完了するまでタイムアウトを設定し、それぞれには運がないことです。助言がありますか???jquery ajax呼び出しが成功したらスクリプトを続行します

var currentStatus = "false"; 
var success = "false"; 

function waitForSuccess(){ 
    if (success == "false"){ 
     var t = setTimeout("waitForSuccess()", 300); 
    } 
    else{ 
     stopTimer(t); 
     return "true"; 
    } 
} 
function stopTimer(t){ 
    clearTimeout(t); 
} 

function checkReps(clicked){ 
$.ajax({ 
      cache: false, 
      url: "chat_new_files/chat_new.php", 
      success: function(data){ 
         success = "true"; 
        } 
     }); 

$('#chatT').live('click', function (event) { 
     success = "false"; 
      checkReps("true"); 
     var changed = waitForSuccess(); 
     if(changed == "true"){ 
        BG.startChatWithIssueId('0', true); //THIS IS THE POPUP 
     } 
}); 

私は、この最後の試みであるsetTimeoutでの論理が台無しになっていると考えています。どのようにこれを修正するか、まったく新しいアイデアのアイデアですか?ありがとう!

答えて

0

あなたが上に複雑なものを、次のとおりです。限り、ブラウザのポップアップブロッカーの問題として、簡単な回避策は<div id="popup"></div>のように、ポップアップコンテナとして機能するdiv要素を作成することです

$('#chatT').live('click',function(){ 
    $.ajax({ 
     cache: false, 
     url: "chat_new_files/chat_new.php", 
     success: function(data){ 
      BG.startChatWithIssueId('0', true); 
     } 
    }); 
}); 

。そのdiv内で、あなたのoldskoolポップアップと同じURLをiframeに追加することができます。最初に、そのdivにCSS #popup { display:none; position:relative; z-index:99999; /* etc...*/ }を与えます。その後、クリックイベントでは、そのdivにはshow()またはfadeIn()と表示されます。デモページに、それらのポップアップがない傾向があるので、

+0

Brilliant。ありがとうございました!これは魅力のように機能します。私はクリックとは別にAJA​​Xコールを持っていなければならないので、私はこれを考えませんでしたが、ちょうどあなたが示したようにクリック機能の中に別のコールを入れました。ありがとうございました! –

2

ajax呼び出しのsuccess:関数でポップアップを開きます。これは、ajax呼び出しが正常に完了したことと、ajax呼び出しから返されたデータにアクセスできることがわかっている唯一の場所です。

タイマーを使用して、ajax機能の実行時に推測しようとしないでください。

+0

しかし、ポップアップをajax呼び出しに置くと、ブラウザのポップアップブロックがブロックされます。 –

+0

ポップアップウィンドウを非同期に開こうとする試みはすべて、ポップアップブロッカーに実行されます。私が知っている唯一の回避策は、クリック時にポップアップウィンドウを開き、その中にデフォルトの「読み込み中...」コンテンツを入れてから、あとでajax呼び出しが完了したときにデータを入力することです。 – jfriend00

0

successにある$.ajax()でコールできるコールバックを使用します。その後、コールバックでポップアップウィンドウを開きます。

function checkReps(clicked){ 
     $.ajax({ 
      cache: false, 
      url: "chat_new_files/chat_new.php", 
      success: function(data){ 
         success = "true"; 
         openPopup(); 
        } 
     }); 
+0

これを試しましたが、ブラウザのポップアップブロッカーがブロックしました。 –

+0

次に、openPopup()のjQuery Modalダイアログのようなものを使用します。http://jqueryui.com/demos/dialog/ – Mrchief

0

ブラウザは、イベントハンドラから発信されていないポップアップをブロックする傾向がある「社外ウェブページ(インラインフレーム)」を読み、リンクをクリックしてください -

例、Colorboxをチェックアウトユーザによって開始される(duh)。これを回避するには、2つの選択肢があります:おそらく http://ajaxload.infoスピナーGIFのいくつかの並べ替えを含め、

  1. 打ち上げimmedatelyポップアップをし、そのコンテンツでフィラーを持って

  2. 避けるには、新しいウィンドウを開いて

    、代わりに必要に応じて の表示と非表示を切り替える 'モーダル' divにコンテンツを配置します。

関連する問題