2017-12-22 13 views
2

私のメッセージングシステムのプッシュ通知を作成していて、奇妙なバグがあります。whileループのAjax

私は最近のメッセージを受け取るためにajaxを使用しています。私のPHPスクリプトでは、私は私の結果を調べるwhileループを持っています。したがって、それぞれ<li>は「最近のメッセージ」です。

私の考えでは簡単です。私は<li>にajax関数を置き、whileループを反復するので、反復から受け取った値を送信します。以下は私のPHPスクリプトです。例えば

$output .= " 
    <li> 
    <img src='$profilephoto' class='rm_pp' alt=''> 
     <div class='imNotification'> 
     <script> 
     function getIMNotification() { 
      $.ajax({ 
      url: 'getIMNotification.php', 
      method: 'POST', 
      data:{user2:'$id'}, 
      success:function(data) { 
       $('.imNotification').html(data); 
      } 
      }); 
     } 

     getIMNotification(); 
     </script> 
    </div> 
    </li> 
"; 

私はちょうど私のAJAXから送られたuser2値をエコーた場合、私のgetIMNotification.phpでは、それぞれの結果のために同じ値をエコーし​​ます。しかし、それはwhileループにあるので、各繰り返しごとに新しい値を受け取るべきではありませんか?

関数が呼び出されていますか?エコーされる1つの値は、最後のidです。なぜそれがそれをやっているのかについてのあらゆる論理?

+0

機能は一つだけを持つことができます定義。ループ内で関数を定義すると、関数が呼び出されたときにだけ最後のバージョンが取得されます。 – Barmar

+0

@Barmar Tru、しかし、彼はすぐにそれを呼んでいるので、ほとんど問題にはならない。それだけで機能ではないかもしれません。 –

+0

'$( '.imNotification').html(data);'もちろん、スクリプトタグの近くにあるすべての '.imNotification'要素を更新します。 –

答えて

3

ループ内で関数を再定義しないでください。関数を一度定義し、そのIDをパラメータとして使用する必要があります。次に、LIごとに個別に呼び出すことができます。

また、そのメッセージの特定のDIVに結果を入れる必要があります。 .imNotificationは、そのクラスのすべてのDIVを選択します。 DIVのIDに$idを使用して、それぞれをターゲットにすることができます。

機能はAJAXから来る必要はありません、あなただけのオリジナルのHTMLにこれを置くことができます。

function getIMNotification(id, target) { 
    $.ajax({ 
    url: 'getIMNotification.php', 
    method: 'POST', 
    data: { 
     user2: id 
    }, 
    success: function(data) { 
     $('#' + target).html(data); 
    } 
    }); 
} 

は、次にPHPは次のよ​​うになります。

$output .= " 
    <li> 
    <img src='$profilephoto' class='rm_pp' alt=''> 
     <div class='imNotification' id='imNotification-$id'> 
     <script> 
     getIMNotification('$id', 'imNotification-$id'); 
     </script> 
    </div> 
    </li> 
"; 
+0

はい、それは完璧に動作します!だから私はid変数をparamとして設定して、あなたの答えに似たループを渡す前に何か似たようなことを試しましたが、個別にセレクタロードを作成したdivのidとtargetを設定していました!あなたの時間と説明をどうもありがとう! – Ryne