2017-12-22 7 views
2

메시징 시스템 용 푸시 알림을 만들고 이상한 버그가 있습니다.while 루프의 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 루프에 있기 때문에 각 반복마다 새로운 값을 받아야하지 않습니까?

함수가 호출 되었기 때문입니까? 에코되는 한 값은 이고 마지막에는 루프에있는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