2011-02-28 3 views
2

AJAX를 사용하는 웹 페이지를 작성하여 텍스트 필드에 데이터를 입력하고 "확인"상자를 클릭 한 다음 데이터를 데이터베이스에 저장하고 " 텍스트 필드와 "OK"버튼을 포함하는 영역을 입력 된 데이터를 기반으로 다른 데이터와 함께 다시로드하십시오. 지금 작동으로, 프로세스는 첫 번째 항목에서 잘 작동하지만 다시 정보를 입력하려고하면 원래 값을 다시 입력 된 것처럼,이 동작 :
예 :ajax onclick 명령으로 오래된 데이터를 가져옴

사용자 입력 : 5
페이지 입력 인 것처럼 동작 : 5
사용자 입력 : 입력 인 것처럼 3
페이지의 동작 : 5
사용자 입력 : 입력 인 것처럼 4
페이지가 동작 5

때 페이지가 처음로드의이 지역은 이렇게 보입니다 (예, 비어 있습니다.) 페이지의 초기로드의 끝을로드하는 코드) : 자바 스크립트 함수 다음

echo "<table>"; 
    // ...Other stuff which I don't think is involved in the problem, though I've been wrong before... 
echo "<tr>"; 
echo "<td>"; 
echo "<div id=\"measurements\">"; 
    // Filled by javascript functions below 
echo "</div>"; 
echo "</td>"; 
echo "</tr>"; 
echo "</table>"; 

가능하며 호출 될 때 페이지가로드 :

function measurementEntered(pid, vid, oid, varn, dat) { 
    // Create XMLHttpRequest object 
    var xmlhttp; 
    if(window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else { 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.open("GET", "ajax_measurements_update.php?varn="+varn+"&pid="+pid+"&vid="+vid+"&oid="+oid+"&dat"+dat+"&user="+user, false); 
    xmlhttp.send(); 
    document.getElementById("measurements").innerHTML=xmlhttp.responseText; 
} 

그리고 ajax_measurements_update.php 페이지에는 데이터를 입력하고 영역을 새로 고치는 다음 코드가 포함되어 있습니다 (영역에 정보를 추가하는 코드가 있지만 문제를 일으키는 것으로 생각하지 않습니다). 당신이 의심되는 경우에, 나는) 더 게시 할 수 있습니다 :

echo "<input type=\"text\" id=\"Select4\" name=\"dat\" size=\"20\" />"; 

echo "<button type=\"button\" onclick=\"measurementEntered($pid, $vid, $oid, $varn, Select4.value);\" />OK</button>"; 

을 그래서이, "확인"버튼을 클릭시에, "Select4"텍스트 필드에서 데이터를 끌어해야하며, measurementEntered 함수를 호출하십시오. 그런 다음 measurementEntered 함수는 새 "OK4"텍스트 필드에서 데이터를 가져올 준비가 된 새 "OK"버튼으로 영역을 새로 고쳐야합니다. 그러나 다시 클릭하면 SelectE4의 원래 값으로 measurementEntered가 호출됩니다. 어떤 아이디어?

감사합니다.

+0

아약스 요청/응답을 디버그하려고합니까? 어떤 데이터가 서버로 전송되며 어떤 데이터가 다시 나타 납니까? (파이어 폭스 또는 dev 버전 크롬에 방화 광을 사용하십시오 - 매우 유용한 도구입니다) –

+0

방화 광은 놀랍습니다. – BCarpe

+0

jQuery로 전환하여 프로그램을 작동시킬 수있었습니다. – BCarpe

답변

5

웹 브라우저에서 연속 요청을 캐시하고 있습니다. 따라서 첫 번째 요청에서 예상되는 결과를 얻고 모든 연속 요청에서 동일한 결과를 얻는 것입니다.

해결 방법 1 -

제 (다음에 요청 URL을 변경 시간 매개 변수를 추가 - 캐시를 사용하지 않으려면

, 2 ajax_measurements_update.php

header("cache-control: no-cache"); 

솔루션에 다음 헤더 정보를 추가 결국 브라우저에서이 URL이 새 URL이라고 생각하므로 캐시에서로드되지 않습니다.

xmlhttp.open("GET", "ajax_measurements_update.php?varn="+varn+"&pid="+pid+"&vid="+vid+"&oid="+oid+"&dat"+dat+"&user="+user+"&temp="+(new Date()).getTime(), false); 

솔루션 3 -

유용한 대안은 jQuery로 전환하는 것입니다. 모든 요청에서 캐시를 사용 불가능하게하려면 문서 준비 기능에 다음 코드를 추가하십시오.결과는 아마 캐시지고 Stop jQuery .load response from being cached

+0

'Select4.value '값이 다르면 다른 GET 요청이 발생합니다. 그래서 그들은 캐쉬되지 않을 것입니다. 아니면 내 의견으로는 실수가 있니? –

+0

+1 for JQuery –

+0

ajax_measurements_update.php에 헤더를 추가하고 타임 스탬프를 추가 했으므로 캐싱인지 확실하지 않습니다. 둘 다 작동하지 않습니다. 나는이 대답을 받아 들였습니다. jQuery로 바꾸라고 제안했기 때문입니다. 문제가 해결되었습니다. – BCarpe

2

-

$.ajaxSetup ({ 
    // Disable caching of AJAX responses 
    cache: false 
}); 

은에 링크. AJAX 요청에 대해 캐시를 비활성화하거나 AJAX 쿼리에 고유 한 GET 값 (예 : 타임 스탬프)을 추가하십시오.

2

당신은 또한 브라우저가 캐시하지 않으려는 PHP 파일에 헤더를 추가 할 수 있습니다

header('Cache-Control: no-cache, must-revalidate');header('Expires: Tue, 1 Jan 2010 12:00:00 GMT');는 지난

3

에 만료 날짜를 추가 캐시하지 않도록 브라우저에 지시하면 경우 캐시하지 않을 URL에 datetime을 추가하십시오.

function measurementEntered(pid, vid, oid, varn, dat) { 
    // Create XMLHttpRequest object 
    var xmlhttp; 
    if(window.XMLHttpRequest) { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else { 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    var currentTime = new Date(); 
    xmlhttp.open("GET", "ajax_measurements_update.php?varn="+varn+"&pid="+pid+"&vid="+vid+"&oid="+oid+"&dat"+dat+"&user="+user+"&dt="+currentTime.getTime(), false); 
    xmlhttp.send(); 
    document.getElementById("measurements").innerHTML=xmlhttp.responseText; 
} 
0

나에게 잘못된 SQL과 같은 소리가납니다. 데이터베이스에서 데이터를 요청하는 데 사용하는 코드는 무엇입니까?

관련 문제