2012-04-05 10 views
1

私は、購読者が受信したいニュースレターを選択できるフォームを持っています.AJAXフォームはExact Targetに結果を送って、購読者をすべてのリストに追加します加えられた。

これを処理するPHP foreachループセットアップがあります。

<?php foreach ($listNumbers as $item): ?> 
      var xmlData = 'Ths is the ET API call'; 
      $.post('ET url for API call'+xmlData);  
     <?php endforeach; ?>  

ループが実行された後、ユーザーはこのような感謝のページに送られます。

$(document).ready(function() { 
location.href = "thank you url"; 
}); 

すべてが機能します。私はループをAPIコールを送信するのに十分な時間を与えたいので、私はドキュメントの準備ができて使用しています。 $ .post関数が完了したときを検出する方法はありますか?それが成功すれば?あなたのページに感謝するためにユーザーを送信する?

コードが実行される前に、hrefという場所がありがとうございましたページにユーザーを送信しています。

おかげで、 マイケル

+0

PHPを使用してjQueryをループして作成する$。post ...なぜですか? – Blake

+0

あなたのやっていることをやるより良い方法があるはずです! – 472084

+0

サブスクリプションスクリプトがサイトにある場合は、チェックボックスの配列を1回のPOSTで送信して、サーバー上で開いている接続の量を減らす必要があります。サブスクリプションスクリプトが他のサーバー上にある場合、クロスドメインスクリプティングの制限のため、ブラウザーは投稿をブロックします。 –

答えて

2

http://api.jquery.com/jQuery.post/

それは

jQuery.post(url [, data] [, success(data, textStatus, jqXHR)] [, dataType]) 
  • URLを終えていますがわかります、コールバックがあります - URLを含む文字列は、要求が送信されます。
  • data - リクエストとともにサーバーに送信されるマップまたは文字列。
  • 成功(data、textStatus、jqXHR) - 要求が成功した場合に実行されるコールバック関数です。
  • dataType - サーバーから予想されるデータの種類。デフォルト:Intelligent Guess(xml、json、script、text、html)。

サンプルスクリプトでは、すべてのリクエストが完了したことを確認する必要がありますが、可能ならば、新しいサーバーサイドコールを書くことを強くお勧めします。

var xhrCount = <?= count($listNumbers) ?>; 
<?php foreach ($listNumbers as $item): ?> 
    var xmlData = 'Ths is the ET API call'; 
    $.post('ET url for API call'+xmlData, null, function() { 
     xhrCount--; 
     if (xhrCount === 0) { 
      location.href = 'myurl' 
     } 
    });  
<?php endforeach; ?> 

ないあなたcount()と間違って何ができるか、確認ができますが、それを自分でカウントすることができます。

var xhrCount = 0; 
<?php foreach ($listNumbers as $item): ?> 
    var xmlData = 'Ths is the ET API call'; 
    xhrCount++; 
    $.post('ET url for API call'+xmlData, null, function() { 
     xhrCount--; 
     if (xhrCount === 0) { 
      location.href = 'myurl' 
     } 
    });  
<?php endforeach; ?> 
+0

コードが壊れているようです。ループをトレースするためのアラートを追加しました。 var xhrCount =; <?php foreach($ listNumbers to $ item):?> var xmlData = 'ThsはET API呼び出しです。'; $ .post(+です。xmlData、ヌル、関数()API呼び出しのETのURL '{ xhrCount--; IF(xhrCount === 0){ LOCATION.HREF = 'myurl' }})。 <?php endforeach; ?> – mkrisch

+0

'count()'は動作するはずですが、どのような変数が '$ listNumbers'ですか、' <?php count($ listNumbers)?> 'を使うことはできません。カウント($ listNumbers); ?> '私はecho文と同等のより簡単な構文で提案したものです。 'count($ listNumbers)'が孤立して返すものをテストすることを確認してください。 –

+0

コードが壊れているようです。私はforeachループが開始された後にループをトレースする警告を追加しました。私は最初の結果を得る。その後、終了します。それは場所hrefに決してしません。私はまた、if(xhrCount === 0)に他の場所のhrefを追加して、コードがそれを遠くにしているかどうかを調べました。何か案は? – mkrisch

1
$(document).ready(function() { }); // this is NOT the callback of the AJAX request 

あなたが(すでに準備ができている)同じページに滞在しているので、それは、すぐに呼び出されますので、上記、動作しません。 AJAX呼び出しは非同期であるため、要求が完了するまで待機しません。

コールを非同期にするか、ajaxリクエストの成功コールバックを使用できます。

は良く明確にする:

$(document).ready(function() {});火災をDOMの準備ができている(すなわち、ページがロードされ、私は(例えば)イベントリスナーを取り付ける他のもののために準備ができていているちょっとのように)。やりたいことのように.post()のコールバックを使用している:

$.post('ajax/test.html', function(data) { 
    // this only gets called when the ajax request is finished 
}); 

しかし、本当の疑問は残る:なぜあなたはAJAXリクエストを構築するためにPHPのループを使用しています。それはまったく意味がありません。 PHPを使用してページを構築しているので、AJAXを使用したいコンテンツを追加してみませんか?

+0

OPは 'location.href'を呼び出そうとしています。終了していなければXHRを取り消します。 –

+0

うん。ですから、XHRの呼び出しは非同期でなければならないか、成功のコールバックに 'location.href'があるべきです。上記の私が何を言っているのが間違っていますか?私はあなたを誤解するか、あなたは私を取得しません。 – PeeHaa

+0

あなたが言及しているコールバックは、ドキュメントがいつ用意されているのか、 '$。post 'が終わった時のためのものではありません。 –

0

あなたはループした後、このvar jqxhr = $.post('ET url for API call'+xmlData);

を試みることができる:

jqxhr.complete(function(){ 
    location.href = "thank you url"; 
}); 

あなたはdocumentationにjqXHRステータス機能について読むことができます。

しかし、全体のアプローチを変更したいことがあります。たぶんあなたのPHPはあなたのページがループする可能性がある1つのjavascript配列を出力するはずです。あなたは何を達成しようとしていますか?

+0

私はabouveコードを試してみましょう。確認のために待機してください...ありがとうございました! – mkrisch

+0

@mkrischこれは、複数の '$ .post'が呼び出されており、すべてが終了するのを待つ必要があるという事実には対処していません。私の答えを参照 –

+0

こんにちはJuan ..私はあなたのコードを使用しています。私はそれが働いている...ほとんど。私はvar xhrCount = <?= count($ listNumbers)?>;を変更しなければならなかった。 var xhrCount = <?php count($ listNumbers)?>;ループが実行され、結果はExact Targetに表示されますが、ロケーションhrefは機能していません。私は空白のページを取得します。私は今トラブルシューティングをしています。 – mkrisch