2011-08-22 2 views
0

AJAX는 한 번만 작동합니다. 다시 작동하려면 페이지를 다시로드해야합니다. 이 문제를 어떻게 해결할 수 있습니까?ajax가 한 번만 작동하는 문제

echo "<div class='unsubscribe'><a id='us$id' href='javascript:unsubscribe($id);'><img src='/unsubscribe.jpg' alt='unsubscribe' /></a></div>"; 



function unsubscribe(number) 
{ 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     document.getElementById("us"+number).innerHTML="<img src='/subscribe.jpg' alt='subscribe' />"; 
    } 
    } 
xmlhttp.open("GET","/unsubscribe.php?id="+number,true); 
xmlhttp.send(); 
} 
+0

: 여기

는 아약스 순서입니다 - 네트워크 요청을 검사하고, 자바 스크립트 예외를보고, 중단 점을 설정하고, 문제를 찾기 위해 코드를 단계별로 실행할 수 있습니다. – lunixbochs

+0

새로운 기술을 공개한다면 [jQuery] (http://jquery.com/)를 사용하여 [ajax calls] (http://api.jquery.com/jQuery.get/)를 만드는 것이 좋습니다.). '$ .get ("/ unsubscribe.php? id ="+ number "); –

답변

0
은 HTML을 변경

: 반드시 href보다는 온 클릭 핸들러를 사용

<a id='us$id' href="#" onclick="unsubscribe($id);"> 

이 작업이 클릭에서 발생 보장하지만 이유입니다 (브라우저의 대상 페이지를 리디렉션하지 않는 기능은 현재 한 번만 발동됩니다). 클릭이 발생하면

페이지의 레이아웃에 따라, 당신은 페이지의 '바보'에서 위의 결과를 찾을 수 있습니다 - 그래서, 당신은 클릭 핸들러에서 false를 반환 시도 할 수있는 경우 :

<a id='us$id' href="#" onclick="unsubscribe($id); return false;"> 
1

브라우저가 AJAX 용 API에서 다른 페이지를 사용하기 때문에 호환되고 쉬운 코드를 작성하려면 jQuery와 같이 유지 관리가 잘 된 라이브러리를 사용하는 것이 현명합니다. 만약 당신이이 스레드에서 다른 추천을 시도 할 수있는 기능의 부 풀릴 필요가 없다.

AJAX Only Javascript Library

0

나는 이름 us$id$id에 문제가 있다고 생각. jQuery를 사용하지 않는 경우 $ 기호는 아무런 의미가 없으며 일반 문자입니다. 따라서 us$id$id은 관련이 없습니다. $id은 부분 문자열이 us$id 인 것입니다. 따라서 unsubscribe($id)은 정의되지 않은 인수와 함께 호출됩니다. us$id 아래의 이미지를 바꾸려면 getElementById("us"+number)이 요소를 찾지 못하기 때문에이 방법이 작동하지 않습니다.

0

xmlhttp.open ("GET", "/ unsubscribe.php? id ="+ number, true); before xmlhttp.onreadystatechange = function() 라인.

  1. 개방()
  2. 을 onreadystatechange
  3. 전송() 나는 바로 여기에 무슨 일이 일어나고 있는지보고 배우는 불을 지르고 또는 크롬 개발자 도구를 추천 할 것입니다