2012-02-24 2 views
0

서버에 .php 파일이 있습니다. 내가 얻은 잠금에 따라 값 1 또는 2를 보내길 원합니다. 그러나 나는 자바 스크립트에서 서버 응답을 사용할 수 없습니다. innerHTML 사용하여 시도했지만 그 값을 사용하는 방법을 모르겠습니다. 나는 AJAX에 완전히 익숙해 져서 내가 만든 멍청한 실수를 용서하지 않는다.AJAX에서 서버 응답을 사용할 수 없습니다.

.PHP 파일

<?php 
$fp1=fopen("a1.jpg","r"); 
$fp2=fopen("a2.jpg","r"); 
if(flock($fp1,LOCK_EX)) 
{ 
    echo "a1 locked"; 
    $ch=1; 
} 
else 
{ 
    flock($fp2,LOCK_EX); 
    echo "a2 locked"; 
    $ch=2; 
} 
$response=$ch; 
echo $ch; 
echo $response; 
?> 

<html> 
<head> 
<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<title>Smart Surveillance Camera</title> 
<script language="Javascript"> 

function loadXMLDoc() 
{ 
    var xmlhttp; 
    xmlhttp=new XMLHttpRequest(); 
    //document.write ("request created"); 
    xmlhttp.onreadystatechange=reload() 
    { 
      if(xmlhttp.readyState==4 && xmlhttp.status==200) 
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
    } 
    xmlhttp.open("GET","lock.php",true); 
    xmlhttp.send(); 
    //document.write (serverResponse); 
    loadXMLDoc(); 
} 

function reload() 
{ 
    document.write(); 
    if(myDiv==1) 
      document.campicture.src="a1.jpg"; 
    else 
      document.campicture.src="a2.jpg"; 

} 
</script> 
</head> 

<body bgcolor="white" onLoad="loadXMLDoc()"> 
<div id="myDiv"> 
<center> 
<font size==-1> 
<h1>SMART SURVEILLANCE CAMERA PAGE</h1> 
<img name="campicture" src="founders.jpg" border=1 width=320 height=240 alt="AYS   founder's IMAGE"><br /> 
</font> 
</center> 
</body> 
</html> 
+0

onreadystatechange 처리기를 넣으면 자바 스크립트가 틀리게 틀립니다. reload 함수 또는 익명 함수를 사용해야합니다. – f2lollpll

+0

하지만 어떻게 서버 응답을 "1"과 비교합니까? – user927774

답변

1

코드 xmlhttp.onreadystatechange=reload()은 원하는대로하지 않습니다. 이는 onreadystatechange 콜백을 정의하거나 함수를 지정하지 않습니다. 콜백을 정의하려면 코드는 다음 중 하나를 같이한다 :

xmlhttp.onreadystatechange = reload; 

//later 
function reload() { 
    //the actions to do on response 
}  

또는

xmlhttp.onreadystatechange = function() { 
    // the actions to do on response 
} 

그것의 현재 사용에 큰 차이가 없을 것입니다. 어느 쪽을 선택하든 내부에서 if(xmlhttp.readyState==4 && xmlhttp.status==200) 코드를 가져야합니다.

그러면받은 값을 사용하게됩니다. 값을 myDiv으로 설정하고 나중에 값을 사용하려고 시도하는 것 같습니다 (비록 myDiv == 1이 어쨌든 작동하지 않지만). 그러나 그렇게 할 필요는 없습니다. 당신의 readystatechange 기능에서, 당신은 단지 값을 직접 사용할 수 있습니다

if (xmlhttp.responseText == "1") 
    document.campicture.src="a1.jpg"; 
else 
    document.campicture.src="a2.jpg"; 

는 기억, 그 부분은 onreadystatechange에 바인딩 가도록 (그렇지 않으면 익명 또는) 함수 내에서 이동합니다.

+0

고맙습니다. Rick !! – user927774

0

사용 jQuery를 파일 .HTML, 그것은 아약스 요청을하고, 더 쉽게, 수정 속성 것입니다.

<script> 
function loadXMLDoc() 
{ 
    var xmlhttp; 
    $.ajax({ 
     url: 'lock.php', 
     type: 'GET', 
     success: function(responseText) { 
      if(responseText === 1) 
       $("#campicture").attr('src', 'a1.jpg'); 
      else 
       $("#campicture").attr('src', 'a2.jpg'); 

     } 
    }) 

    loadXMLDoc(); 
} 
</script> 

<img id="campicture" src="founders.jpg" border=1 width=320 height=240 alt="AYS   founder's IMAGE"><br /> 
관련 문제