java update div, nu php refresh opend in div

Status
Niet open voor verdere reacties.

phobia

Terugkerende gebruiker
Lid geworden
4 sep 2006
Berichten
1.777
ik had deze vraag al neegelegd bij de php forum, maar daar kwamen we er niet uit.
het volgende is het probleem

ik zit een een probleempje... laat ik anders zeggen ik snap het niet.

ik heb een knop(op index.php), die voert een paar php funties uit van bv test.php. nu wordt test.php
door een javascript geopend in een div, om de echo's van de voorgang netjes weer te geven. gaat allemaal goed.

maar nu wil ik aan het einde van de test.php de header laten refreshen om te zorgen dat alle info op de pagina een up to date is.
dat doe ik dan met header("Location: index.php")
ik heb het ook geprobeerd met header("Refresh: url=index.php")

maar tot mijn grote verbazing word wel de index.php geopend, maar in de div waar ik de test.php naar toe verwezen had. hoe kan dat? en belangrijker nog hoe los ik ddat op?

het gebruikte script:
Code:
<script type="text/javascript">
 
function getXMLHTTP() { //fuction to return the xml http object
   
    var xmlhttp=false;  
    try {
        xmlhttp=new XMLHttpRequest();
    } catch(e) {        
        try {           
            xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {
            try{
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch(e1) {
                xmlhttp=false;
            }
        }
    }
            
    return xmlhttp;
}
 
function link(strURL,strDIV) {
 
  var req = getXMLHTTP(); // fuction to get xmlhttp object
 
  if (req) {
 
    req.onreadystatechange = function() {
 
      if (req.readyState == 4) { //data is retrieved from server
 
        if (req.status == 200) { // which reprents ok status     
        
          document.getElementById(strDIV).innerHTML=req.responseText;
        } else { 
          alert("There was a problem while using XMLHTTP:\n");
        }
      }            
    }        
    req.open("POST", strURL, true); //open url using get method
    req.send(null);
 
  }
}
 
 function getobject(objx)
 {
if (document.getElementById)
return document.getElementById(objx)
else if (document.all)
return document.all[objx]
}

kan hier iemand mij vertellen hoe dat komt en hoe ik het misschien kan herstellen/omzeilen of aanpassen?
 
Aan je stuk Javascript ligt het niet, denk ik zo, het is een standaard AJAX request geval. Te weinig informatie om er iets over te kunnen zeggen. Heb je een link, of anders de php/html/totale js code van je geval?



:thumb:
 
ik heb nog even zitten denk.
De bedoeling is..

ik heb een div met een een table met backup info(datum laatste update) en een restore info(datum laatste restore)

de datums laat ik na de bewerking wegschrijven in een klein textbestandje.

kan ik met een script, zeg om de 15sec, de info verversen. of chechen of het veranderd is en dan updaten?

dan is het niet meer nodig om de hele pagina te verversen....hi heb ik een hekel aan!

het textbestand je ziet er zo uit:
de eerste datum is backup en de 2de is restore
20-02-2010,21-02-201 * 21h09m49
 
Laatst bewerkt:
Ik ben geen kei in javascript, maar als ik het goed begrijp, zou je het misschien met een cookie kunnen oplossen:
  • "het kleine textbestandje" dat na een verandering is gecreëerd, wordt een cookie (of wellicht 2 stuks);
  • bij inladen van de pagina maak je met javascript zo'n cookie aan;
  • vervolgens laat je javascript om de zoveel tijd (met setInterval) checken of er iets veranderd is (cookie opvragen en vergelijken met de op dat moment aanwezige waarde);
  • zo ja, updaten.
Zo'n soort idee: is dat iets?

Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
ik heb mezelf dit een beetje uitgedacht, maar ik weet niet of dit zo werk.
en hoe ik er een timer aan moet maken om het script om de bv 10sec uit te voeren.

zou iemand dit script voor mij willen controleren en die temer uitleggen of invoegen?

Code:
function refreshData() {
var txtFile = new XMLHttpRequest();
var txtBackup = outputbackup.value;
var txtRestore = outputrestore.value;
txtFile.open("GET", "http://localhost:8080/db_cntroller/php/back_up_db/log_file/backuprestore.dat", true);
txtFile.onreadystatechange = function() {
  if (txtFile.readyState === 4) {  // Makes sure the document is ready to parse.
    if (txtFile.status === 200) {  // Makes sure it\'s found the file.
      allText = txtFile.responseText; 
      lines = txtFile.responseText.split(\",\"); // Will separate each line into an array
    }
  } 
}
  if (txtBackup !== lines[0])
		{ outputbackup.value = lines[0]; }
  if (txtRestore !-- lines[1])
		{outputrestore.value = lines[1];}
		
txtFile.send(null);	 
}

of dit! De data file staat op dezelfde server.

Code:
function refreshData() {

var txtBackup = document.outputbackup.value;
var txtRestore = document.outputrestore.value;

fh = fopen("php/back_up_db/log_file/backuprestore.dat", 0); // Open the file for reading 
if(fh!=-1) // If the file has been successfully opened 
{ 
    length = flength(fh);         // Get the length of the file     
    str = fread(fh, length);     // Read in the entire file 
	data = str.split(\",\");	// split file in backup en restore
    fclose(fh); 
}
  if (txtBackup !== data[0])
		{ document.outputbackup.value = data[0]; }
  if (txtRestore !-- data[1])
		{ document.outputrestore.value = data[1];} 
}

maar bij allebij krijg ik een error. waardoor ze rest van mij java niet meer werkt.
 
Laatst bewerkt:
ik heb het script zelf al aangepast en er zitten zo ver ik weet geen errors meer in, maar nu moet ik alleen nog de timer aan de praat krijgen. Zodat de timer gestart word en om de x seconden de controle gaat doen.

het volgende heb ik gemaakt.
Code:
return document.getElementById(objx)
else if (document.all)
return document.all[objx]
}
function timedCount()
{
refreshData();
t=setTimeout("timedCount()",1000);
}


function refreshData() {

var txtBackup = getobject("outputbackup").value;
var txtRestore = getobject("outputrestore").value;

fh = fopen("/php/back_up_db/log_file/backuprestore.dat", 0); // Open the file for reading 
if(fh!=-1) // If the file has been successfully opened 
{ 
    length = flength(fh);         // Get the length of the file     
    str = fread(fh, length);     // Read in the entire file 
	data = str.split(",");	// split file in backup en restore
    fclose(fh); 
}
  if (txtBackup !== date[0])
		{ getobject("outputbackup").value = data[0]; }
  if (txtRestore !== data[1])
		{ getobject("outputrestore").value = data[1];} 
}

  onload = timedCount();
 
dit is mijn code
Code:
function getobject(objx){
if (document.getElementById)
return document.getElementById(objx)
else if (document.all)
return document.all[objx]
}

function refreshData() {

var txtBackup = getobject("outputbackup").value;
var txtRestore = getobject("outputrestore").value;
fh = fopen("php/back_up_db/log_file/backuprestore.dat", 3); // Open the file for reading 
if(fh=-1) // If the file has been successfully opened 
{ 
    length = flength(fh);         // Get the length of the file     
    str = fread(fh, length);     // Read in the entire file 
	
	data = str.split(",");	// split file in backup en restore
    fclose(fh); 
}
  if (txtBackup !== date[0])
		{ getobject("outputbackup").value = data[0]; }
  if (txtRestore !== data[1])
		{ getobject("outputrestore").value = data[1];} 
}

refreshData();

ik hebde functie zo direct aan proberen te roepen, met intervalTimer en setTimeout.
maar nix werk. als ik het aan een knop hang, dan start hij wel, maar dan oorzaakt het script fouten. en ik kom er niet uit wat het is. heb het idee dan het aan het pad naar de file ligt. maar hoe kan ik dit testen?
de javescript staat in de index.

en het pad naar de file vanaf de index is.
php//back_up_db/log_file/backuprestore.dat

kan pleaseiemand mij helpen......kost me kostbare nachtrust!!!!!
 
Niet alle variabelen zijn benoemd:
[JS]fh = fopen(...
length = ...
str = ...
data = [/JS]
moet dat niet zijn:
[JS]var fh = fopen(...
var length = ...
var str = ...
var data = [/JS]
En een paar tikfoutjes:
Code:
[FONT="Courier New"][SIZE="2"]if (fh=-1) > if (fh=[COLOR="Green"]![/COLOR]-1)
if (txtBackup !=[COLOR="Red"]=[/COLOR] dat[COLOR="Red"]e[/COLOR][0]) >   if (txtBackup != data[0])
if (txtRestore !=[COLOR="Red"]=[/COLOR] data[1]) >  if (txtRestore != data[1])[/SIZE][/FONT]
Helpt dat?
 
ik heb het aangepast en een paar alrts geplaatst, en de functie komt niet verder dan
alert "1" bij het openen van de file loopt het in de soep.

Code:
function refreshData() {
alert("start");
var txtBackup = getobject("outputbackup").value;
var txtRestore = getobject("outputrestore").value;
alert("1");
var fh = fopen("php/back_up_db/log_file/backuprestore.dat", 3); // Open the file for reading 
alert("2");
if(fh=!-1) // If the file has been successfully opened 
{ 
	alert("3");
    var length = flength(fh);         // Get the length of the file     
    var str = fread(fh, length);     // Read in the entire file 
	
	var data = str.split(",");	// split file in backup en restore
    fclose(fh); 
}
	alert("4");
  if (txtBackup != date[0])
		{ getobject("outputbackup").value = data[0]; }
  if (txtRestore != data[1])
		{ getobject("outputrestore").value = data[1];} 
}
 
Open het eens in firefox - druk dan op crtl+shift+J. Je ziet een foutenconsole, onderaan zal dan wel de fout staan waarom ie niet verder komt dan je 1e alert.

Overgens zal het dus wel aan de fopen() liggen - hoe ziet deze functie eruit? Of zit je nu php-achtige dingen erin te mixen (, of gebruik je php2js functies)?

Overgens is het hele geval niet zo heel lastig. Zie de bijlage voor een simpel voorbeeld. Maakt gebruik van een simpel 'AJAX' script met een override-mimetype fix.
 

Bijlagen

Laatst bewerkt:
ik had een ander idee voor mijn probleempje bedacht.
Het zal niet de schoonheidsprijs winnen en ik weet ook nog niet of het eigenlijk wel kan,

maar ik dacht om het volgende te doen.....

if ( x == y)
{ echo 'hello'; }
else
{ ?><script> startfunctie(); </script><?php }

ik weet niet of het kan, maar dit wil ik nog ff uitproberen. want dan omzeil ik timers en inlezen van file.
 
Jawel, je kan javascript echoen vanuit php. Het wordt soms echter een beetje tricky, maargoed.

Als je je blijft bedenken dat php server-side is en javascript client-side kom je er wel uit. Overgens is het mischien een 'leuker' idee om php het bestand te laten checken? Scheelt weer javascript-code.

Hoor wel weer,



:thumb:
 
ik begrijp het iet meer!

als ik
PHP:
echo '<input type="submit" onclick="link(\'info_refresh.php\',\'info_db\')" value="refresh" />';

uitvoer, dan wordt de javascript functie netjes uitgevoerd.

maar doe ik
PHP:
echo "<script>link('info_refresh.php','info_db');</script>";

of ik doe op de pagina zelf ?><script>link('info_refresh.php','info_db');</script><?php

wordt de functie niet uit gevoerd!
 
Dat's raar, maar het kan aan meerdere dingen liggen. Zoals bijvoorbeeld het feit dat de functie link() wel al eerder moet zijn ge-echo'ed.

Maar om het zeker te weten hebben we toch echt meer code nodig!
 
dat klopt, ik zal proberen eenbeschrijving te geven van de site opzet.

index.php=> maak de opzet van de pagina aan, de knoppen werken met onclick en starten de link functie van javascrip om in de div main de subpagina aan te maken.

op de subpagina zitten knoppen die ook de link functie hebben om een bewerking te starten...welke in de div info gebeurt om de voortgang te echoen van het php script.
Nu is het de bedoeling dat dit laatste script de gegevens in de div main_info wijzigd, om de gegevens van de laatste verandering te vernieuwen.

uit wat ik zelf algeprobeert heb, blijkt dat ik wel via een knop deze actie kan laten doen, maar dater verder niet een javascript alert of iets gestart kan worden.
 
Ik volg het niet (meer). Je hebt dus een php pagina die je 'AJAX'-ed op je main php pagina, en deze moet zijn voortgang aangeven... of iets dergelijks?


:confused:
 
voorbeeld op www.morphius.nl/db

ja, op de index staan knoppen, die zorgen ervoor dat bij clicken dat de div 'main' de gewenste pagina wordt weergegevens. in die weergegave staan knoppen waarmee je een handeling kunt laten uitvoeren. Die ook door de link functie worden aangestuurd.

de gewenste handeling word uitgevoerd in de div 'info', omdat als de php pagina handelingen voltooid heeft een echo doet... dat werkt allemaal netjes en mooi.

maar nu wil ik aan het einde van de opdracht, dat een div met de info over wanneer debewerking gedaan is word geupdate.
 
Oh, wacht even. Je wil dus dat de losse pagina's die je via dat ge'AJAX' aanroept, ook javascript gebruikt, maar deze staat dus in de losse files.

Een bekend(er) probleem. Het idee is dat de data (javascript) die je aanroept via je 'AJAX' call niet wordt geparsed.

Je moet er dus een workaround voor vinden. Eentje staat bijvoorbeeld hier, maar wellicht een overkill voor jou probleem.

Maar, in plaats van je javascript in die pagina te zetten is het mischien handiger het los te hebben. Bijvoorbeeld in een andere file, met dezelfde naam als je aanroep file maar dan met .js erachter - en deze dan in een script tag donderen, en appenden.

[js]var s = document.createElement('script');
s.setAttribute('type', 'text/javascript');
s.setAttribute('src', ajaxcalled + '.js');

document.body.appendChild(s);[/js]
 
Laatst bewerkt:
okey, zal kloppen wat je zegt. Maar ik kan je ff helemaal niet meer volgen!

zou je het in simpele taal kunnen uitleggen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan