2014-09-28 5 views
0

가 여기 내 자바 스크립트 기능입니다 표시되지 : -XMLHttpRequest의 출력이

해결 자바 스크립트 기능 : - 여기

function delfile(fileid) { 
    var div = "fileid_" + fileid; 
    var location = "/delfile/" + fileid; 
    if (window.XMLHttpRequest) 
    { 
    var xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    { 
    var xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     document.getElementById(div).innerHTML=xmlhttp.responseText; 
    } 
    } 
    xmlhttp.open("POST", location, true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send(""); 
} 

내가 PHP에서 생성하는 것입니다 : -

echo "<td><div id='fileid_{$id}'><button onclick='delfile({$id})'>Delete File</button></div></td>"; 

내 문제가 있다는 것입니다 사용자가 2-3 개의 링크를 동시에 클릭하면 http 요청이 javascript를 통해 전송되고 파일은 서버에서 삭제되지만 div id는 http-request의 출력으로 업데이트되지 않습니다. 사용자가 마지막으로 클릭 한 버튼 만 http-request의 출력을받습니다.

PHP 스크립트에는 아무런 문제가 없습니다. 방금 참고할 수 있습니다. delfile 스크립트는 "File Delted"를 전송합니다.

@torazaburo가 제안한대로 지역 변수를 사용하여 해결했습니다.

+0

MS 크래프트를 제거하십시오. IE6 이하에만 적용됩니다. 다른 XMLHttpRequest 상용구도 제거 할 수 있습니다. 우리는 어떻게 작동하는지 알고 있습니다. 그냥 호기심에서 8 살짜리 책을 복사 해 봤어? –

+0

IE 6에서 작동하므로 제거 할 수 없습니다. –

+0

IE6 점유율은 모든 선진국에서 1 % 미만입니다. https://www.modern.ie/en-us/ie6countdown을 참조하십시오. MS가 XP 지원을 중단하면 곧 0으로 떨어집니다. 그것을 유지하기를 원하는지 여부는 당신에게 달려 있지만, 코드 샘플을 이와 같이 관련없는 세부 사항으로 막지 마십시오. –

답변

1

함수에 로컬 인 xmlhttp을 선언하지 못했습니다. 즉, 여러 요청간에 공유되어 재난의 처방입니다.

이 기능을 사용하는 동안 $div$location을 로컬로 선언하십시오. 또한 뇌가 썩는 것으로 알려져 있으므로이 변수 이름 앞에 $이라는 접두사를 제거하십시오.

"use strict;"를 입력하면 변수를 선언하지 못했을 것입니다. 당신이해야하는 것처럼, 당신의 기능의 맨 위에.

+0

로컬 변수로 어떻게 선언합니까? –

+0

JS 자습서의 첫 번째 단락에 설명되어 있습니다. 힌트 :'var'을 사용하십시오. –

+0

나는 var를 사용했지만 여전히 같은 문제가 있습니다. –