login  Naam:   Wachtwoord: 
Registreer je!
 Forum

ajax title laten veranderen (Opgelost)

Offline Martijn - 21/09/2008 15:08
Avatar van MartijnCrew PHP ik heb een site, waar je in kan loggen, en dan zie je je statistieken en users online enzo. Die staan allemaal in refresh.php die ik steeds oproep via AJAX.

Werkt allemaal prima. Maar wat niet wil lukken is dat je title veranderd als je een bericht hebt.

Ik heb nu dit:
  1. function titel($waarde) {
  2. echo '<script language="javascript" type="text/javascript">'."\n";
  3. echo "document.title = '".$waarde."' + document.title "."\n";
  4. echo '</script>'."\n";
  5. }


uit refresh.php:
  1. <div id='msg'>
  2. <?php
  3. $zoekenoftmoet=mysql_query("SELECT id FROM berichten WHERE naar=".$stat['id']." AND once=2") or die(mysql_error());
  4. $telberichten=mysql_num_rows($zoekenoftmoet);
  5. if($telberichten==1){$teksie="1 nieuw bericht! ";}
  6. elseif($telberichten!=0){$teksie= $telberichten." nieuwe berichten! ";}
  7. else{$teksie="";}
  8.  
  9.  
  10. if($teksie!=""){
  11. echo"<a href='?p=berichten'>".$teksie."</a>";
  12. titel($teksie);
  13. }
  14. else{echo"";titel($teksie);}
  15. ?>
  16. </div>


dat werkt alleen als ik ergens op klik, maar ik wil juist dat het komt zonder ergens op te klikken.
Iemand die t weet?

21 antwoorden

Gesponsorde links
Offline Kr4nKz1n - 21/09/2008 15:13
Avatar van Kr4nKz1n Onbekend Spijtig dan weer dat het zo geprogrammeerd is.

Kun je a.u.b. meer werken met spaties, enters, tabs en dubbele quotes (") bij HTML en enkele quotes bij PHP (').

Mare ik zie nergens AJAX?
Als je het zo doet, kun je dat beter met PHP oplossen bij de title
Offline Martijn - 21/09/2008 15:21
Avatar van Martijn Crew PHP dit het bestand dat word opgehaald en neergezet door AJAX. Het refresh.php bestand dus
Offline BramBo - 21/09/2008 19:06
Avatar van BramBo JS gevorderde Hoe heb je je AJAX calls gedeclareerd? Wanneer je scripts gebruikt dien je deze te 'evallen' anders worden ze niet uitgevoerd.
Offline Martijn - 22/09/2008 19:14 (laatste wijziging 22/09/2008 19:18)
Avatar van Martijn Crew PHP ik heb echt geen flauw idee waar je t over heb 

  1. function sendRequestTest() {
  2.  
  3. http.open('get', 'refresh.php');
  4. http.onreadystatechange = plaatsInfo;
  5. http.send(null);
  6.  
  7. }

Het is uit het ajax script van hier 

edit: Ik zie het 1 en ander van eval(), maar ik zie niet hoe ik dat moet toepassen in mn functie(die in mn 1e post staat)
Offline vinTage - 22/09/2008 19:22
Avatar van vinTage Nieuw lid Wat Brambo bedoelde is dat je (in prototype i.i.g) je scripts moet laten parsen als script en niet als string (wat nu wel gebeurd)

Hoe je dit precies doet in jouw functie weet ik ook niet, maar in prototype gebruik je i.i.g
{evalScripts:true}
als parameter.

Nu heb je nog geen antwoord, maar je weet in ieder geval wel wat het probleem is.
Offline Martijn - 22/09/2008 19:34
Avatar van Martijn Crew PHP ik heb nu dit in mn js bestand staan die ik zonder ajax op mn pagina heb:

  1. function berichtTitle(title) { eval(document.title = title + document.title) }


en op mn refresh.php
  1. echo ' <script language="javascript" type="text/javascript">
  2. berichtTitle("'.$teksie.'");
  3. </script>';
Offline vinTage - 22/09/2008 19:36
Avatar van vinTage Nieuw lid Maar je probleem is volgens mij die hele echo.
Offline Martijn - 22/09/2008 19:39
Avatar van Martijn Crew PHP hoe bedoel je?
Offline vinTage - 22/09/2008 19:40
Avatar van vinTage Nieuw lid Dat is gewoon een string en geen script, dat bedoel ik.

offtopic, maar waarom maak je die titles zo erin? voor de SEO hoef je het niet te doen, spiders gebruiken geen js
Offline BramBo - 22/09/2008 19:53
Avatar van BramBo JS gevorderde je callback: plaatsInfo

ziet er die iets uit als:
  1. function plaatsInfo(request) {
  2. document.getElementById('whatever').innerHTML = request.responseText;
  3. }
?

deze regel kun je vervangen door een aanroep van 'n functie die de script elementen extract, Als je van plan bent meer AJAX te gebruiken in je website en vaker scripts moet evallen e.d. raad ik je aan om een framework te gebruiken, als prototype, mootools of JQuery.

Anyway hier is de functie (Niet mijn eigen code!):
  1. function setHTML(div,content) {
  2. var search = content;
  3. var script;
  4.  
  5. while( script = search.match(/(<script[^>]+javascript[^>]+>\s*(<!--)?)/i))
  6. {
  7. search = search.substr(search.indexOf(RegExp.$1) + RegExp.$1.length);
  8. if (!(endscript = search.match(/((-->)?\s*<\/script>)/))) break;
  9.  
  10. block = search.substr(0, search.indexOf(RegExp.$1));
  11. search = search.substring(block.length + RegExp.$1.length);
  12.  
  13. var oScript = document.createElement('script');
  14. oScript.text = block;
  15. document.getElementsByTagName("head").item(0).appendChild(oScript);
  16. }
  17.  
  18. document.getElementById(div).innerHTML=content;
  19. }


en mocht je de regel hebben zoals eerder, kan je die vervangen met:
  1. // document.getElementById('whatever').innerHTML = request.responseText; WORDT
  2. setHTML('whatever', request.responseText);
Offline Martijn - 22/09/2008 22:52
Avatar van Martijn Crew PHP daar snap ik op het moment weinig van maar ik zal er morgen is naar kijken

offtopic: Ik wil dat die dingen in mn title komt te staan dat als je meerdere tabbladen open hebt, of mijn pagina geminimaliseerd, je alsnog makkelijk kan zien dat je een nieuw bericht hebt
Offline BramBo - 22/09/2008 23:33 (laatste wijziging 22/09/2008 23:34)
Avatar van BramBo JS gevorderde ik zou je dan toch een framework aanraden. Zit een learning curve aan vast maar hiermee maak je je zelf het vele malen gemakkelijker, aangezien je script redelijk uitgebreid moet worden.

Zo kun je in prototype (dit is veruit de eenvoudigste om mee te beginnen, hoewel jQuery zeker een aanrader is!) eenvoudig AJAX requests in dienen, elementen editen etc.

hier een voorbeeldje uit gewerkt met het gewenste gedrag (download prototype):
a.html
  1. <html><head>
  2. <title> asd asd</title>
  3. <script type='text/javascript' charset='utf-8' src='prototype.js'></script>
  4. <script type="text/javascript" charset='utf-8'>
  5. Event.observe(window, 'load',
  6. function(evt) {
  7. new Ajax.Updater('test_div', 'b.html', { evalScripts: true });
  8. });
  9. </script></head><body>
  10. <div id="test_div">asd</div>
  11. </body>
  12. </html>


b.html
  1. <script type='text/javascript' charset='utf-8'>
  2. document.title = "Nieuwe Titel !";
  3. </script>
  4. en nog wat !


that's all 
Offline vinTage - 22/09/2008 23:41
Avatar van vinTage Nieuw lid off
jquery is zeker een aanrader
Offline BramBo - 23/09/2008 00:14 (laatste wijziging 23/09/2008 00:15)
Avatar van BramBo JS gevorderde oh nice, nog nooit een testje tegen prototype gezien, maar zo te zien moet ik overstappen naar Dojo.. Ben alleen weg van jQuery's chaining mogelijkheid 

MAar goed zal jQuery ook nog adverteren dan(download):
en voorbeeld:
  1. $(function() { $.get('b.html', function(data){ $("#test_div").empty().append(data); }); });

^^

Edit: dit is dus de enige js die je in je a.html hoeft te zetten (naast het includen van jQuery)
Offline Martijn - 23/09/2008 20:39 (laatste wijziging 23/09/2008 20:45)
Avatar van Martijn Crew PHP geen succes met prototype of met jQuery

Ik zal even meer volledige script neerzetten, zoals ik het nu heb (met jQuery)

moment

refresh.php (word dus aangeroepen door ajax)

de div waar het word neergezet:
  1. <div id='refresh'><?php include_once"refresh.php";?></div>


Het stukje uit mn head wat alle JS doet
mn ajax die het...angeroepen
Offline vinTage - 23/09/2008 22:05
Avatar van vinTage Nieuw lid Ik snap er helemaal niks van je uitleg/verhaal/code, maar dit werkt hier gewoon:

  1. <?
  2. $bool = false;
  3.  
  4. if(!$bool)
  5. {
  6. ?>
  7. <script type="text/javascript">
  8. document.title='bool is false';
  9. </script>
  10. <?
  11. }
  12. else
  13. {
  14. ?>
  15. <script type="text/javascript">
  16. document.title='bool is true';
  17. </script>
  18. <?
  19. }
Offline Martijn - 23/09/2008 22:25 (laatste wijziging 23/09/2008 22:29)
Avatar van Martijn Crew PHP oke, ik zal het nog 1x proberen 

Ik heb main.php. Dat is het bestand waarin ik een banner,menu en een pagina die is aanklikt in laad (via get uit link).

Omdat ik het leuk vind, heb ik ajax gemaakt die de info die je vind in de banner op een refresh staan, ookwel refresh.php.
Ik heb een los .js bestand waar ik mn JS in heb, daar staat mn ajax in, en die functie word geladen met een body onLoad.

Als je een nieuw bericht krijgt, komt dat linksonder in de banner te staan. Nu wil ik graag ook dat er in de title komt te staan dar er een nieuw bericht is.

2 posts hierboven is code te vinden van wat ik op het moment heb (voor de late inhakers )

edit: Ik moet nu gaan, en kan pas zondag weer kijken, dus dan kijk ik of er slimme mensen (*slijm* ) zijn
Offline BramBo - 24/09/2008 09:14
Avatar van BramBo JS gevorderde je gebruikt momenteel jQuery, Prototype en je eigen js code ?

er van uit gaande dat je voor jQuery gekozen hebt, hoef je alleen de call te doen:
  1. $.get('refresh.php', function(data){ $("#refresh").empty().append(data); });
  2. // ipv .empty().append(data) kan je ook gebruiken .html(data)


Dit stukje code doet een AJAX getnaar refresh.php en update #refresh met de content, al je andere ajax code en je prototype code is dus neit meer nodig ;)

of om je 30000ms window.setInterval aan te passen voor jQuery:
  1. $(function() { window.setInterval(function() { $.get('refresh.php', function(data){ $("#refresh").html(data); }); }, 30000);}

Al je ander code kan hiermee weg 

(ps: zorg dat je prototype NIET laad hebt als je jQuery geladen hebt, of voer .noConflict() uit op jQuery)
Offline Martijn - 28/09/2008 12:39 (laatste wijziging 28/09/2008 12:54)
Avatar van Martijn Crew PHP ik heb alleen jQuery aanstaan, ik had al bbedacht dat het vast niet fijn was als ik dat alle2 aan zou hebben 

Wat vraagjes:
1-je hebt nu .html. Dat is bij mij een php bestand die dingen uitvoert, ik ga dr een beetje van uit dat dat geen problemen oplevert...?
2-waar moet ik die call plaatsen? ik heb m nu zo:
  1. <script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
  2. <script type="text/javascript">
  3. $(function() { window.setInterval(function() { $.get('refresh.php', function(data){ $("#refresh").html(data); }); }, 30000);}
  4.  
  5. </script>


3 function(data), moet ik van data mijn functie maken, of moet data data blijven?

edit: Ik heb nu die regel neergezet zoals hierboven staat in mn head, en mn eigen ajax uitgezet, maar nu gebeurd er niets meer...
edit2: een missing ), gemaakt, maar krijg nu deze error:
Citaat:
$("#refresh").php is not a function
$.get('refresh.php', function(data){ $("#refresh").php(data); });


sorry dat ik zoveel vraag, maar mn JS kennis is erg weinig, en dan is dit allemaal erg lastig 
Offline BramBo - 28/09/2008 23:12
Avatar van BramBo JS gevorderde 1. geen probleem, was gewoon 'n voorbeeldje

2. $(function() {}) is een shorthand notatie voor het document ready event (equivalent aan window.onload alleen zonder 't laden van de images).

window.setInterval ken je. Deze voert de functie die gepassed wordt uit na 30sec en dan om de 30 sec.

$.get('refresh.php', function(data){ }) is de AJAX call naar refresh.php en $("#refresh").html(data); doet een update met de data (responseText van je HttpRequest)

je kunt even proberen om de 30000 te veranderen naar 1000 o.i.d. zodat je geen halve minuut hoeft te wachten 

.php is inderdaad geen functie .html(data) dien je te gebruiken dit is een functie van jQuery om HTML te parsen (incl. <script> e.d.)

Offline Martijn - 28/09/2008 23:27
Avatar van Martijn Crew PHP hartstikke bedankt voor alle moeite en tijd! Het werkt nu (met een paar kinderfoutjes), echt heel erg bedankt. Nu kan ik ook makkelijk andere dingen ajaxen mocht ik ook de wilde behoefte hebben
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.25s