2011-05-05 3 views
0

다음 코드를 사용하여 게시물에 댓글을 추가하고 페이지를 새로 고치지 않고 표시하지만 어쨌든 한 번이 아닌 두 번 표시됩니다. 데이터베이스에 한 번만 저장됩니다. 페이지를 새로 고치면 각 주석이 한 번만 표시되므로 문제는 "ajax 응답"과 같습니다. 여기에 코드가 있습니다. 도움을 주셔서 감사합니다.AJAX를 통해 게시 될 때 댓글이 두 번 표시되지만 페이지 리로드에 한 번만 표시됩니다.

자바 스크립트 :

function addComment(pid) { 
    var url; 
    var comment = document.getElementById("comment").value; 
    xml_http = getXmlHttpObject(); 
    if (xml_http == null) return alert("Your browser is too old to run this page!"); 
    url = '../auth.php?comment=' + comment + '&pid=' + pid; 
    url += '&p=' + Math.random(); 
    xml_http.onreadystatechange = commentStatus; 
    xml_http.open("GET", url, true); 
    xml_http.send(null); 
} 

function commentStatus() { 
    $("#comm").append(xml_http.responseText); 
} 

PHP : 나는 의도적으로 데이터베이스에서 주석을 읽지 않는

include_once('include/comment.php'); 
addComment($_GET['pid'], filter($_GET['comment'])); 
if(empty($_SESSION['pic'])) $pic = "images/silh.gif"; 
else $pic = "/profile/image.php/{$_SESSION['uname']}.{$_SESSION['pic']}?width=45&cropratio=1:1&image=/profile/pix/{$_SESSION['uname']}.{$_SESSION['pic']}"; 
echo "<div id='comments'>\n" 
    ."<img src='{$pic}' align='left' style='padding-right:5px' />" 
    ."<span id='bluetxt'>By {$_SESSION['uname']}</span><br />\n" 
    ."<span>Posted Now</span>\n" 
    ."<br /><br /><p style='clear:both'>{$_GET['comment']}</p>" 
    . "</div><br />\n"; 

, 나는 단순히 다시 페이지에 게시.

+1

아래로 인해 쓸모 제목의 투표를. 수정 된 제목 :) – James

+3

jQuery를 사용하고 있습니다. 왜 Ajax 함수를 사용하지 않습니까? BTW, 가능한 [XSS 공격] (http://en.wikipedia.org/wiki/XSS) 발견 : * 항상 * 웹 페이지에 사용자 데이터를 출력 할 때'htmlspecialchars' 또는'encodeurl' (유스 케이스에 따라 다름)을 사용하십시오. –

+0

BTW, 당신은 필요없이 전역 변수를 사용하고 있습니다 ('xml_http'). 제발하지 마! 그리고'encodeURIComponent'를 사용하여 쿼리 매개 변수를 적절히 인코딩하십시오. 그리고 아마도 데이터베이스를 업데이트하기 위해'GET' 요청을 사용하지 말아야합니다.'GET' 요청은 멱등수 여야합니다. –

답변

1

당신은 아마 xml_http 상태는 다음과 같이 그것을 시도하십시오 경우에만 주석 추가해야합니다

function addComment(pid) { 
    var url; 
    var comment = document.getElementById("comment").value; 
    var xml_http = getXmlHttpObject(); 

    if (xml_http == null) 
     return alert("Your browser is too old to run this page!"); 

    url = '../auth.php?comment=' + comment + '&pid=' + pid; 
    url += '&p=' + Math.random(); 

    xml_http.onreadystatechange = function() { 
     if (xml_http.readyState==4) { 
      appendComment(xml_http.responseText); 
     } 
    }; 

    xml_http.open("GET", url, true); 
    xml_http.send(null); 
} 

function appendComment(commentHTML) { 
    $("#comm").append(commentHTML); 
} 
+0

... 그리고 그 동안 당신은 전역 변수를 제거하고'xml_http.status'를 체크하십시오. –

+0

한 번에 한 가지만) – rciq

+0

글쎄, 우리는 이에 대해 의견을 달리 할 수는 있지만 누군가가 질문자보다 더 많은 것을 말해 줄 수는 있지만 다른 오류가 발생하지 않도록해야한다고 생각합니다. 그렇지 않으면 Chibuzo가 곧 "왜 내 ResponseText가 비어 있습니까?"또는 "내 xml_http 변수가 변경된 이유는 무엇입니까?"라고 대답 할 것입니다. –

관련 문제