men /page.php får bara retunera det som #userbar blocket skall få för text.
kolla efter nya meddelande utan siduppdatering?
53 svar · 2 991 visningar · startad av vagann · sida 2 av 3
Frågan, av vagann
hej , jag ville göra så att sidan visar om man har ett nytt meddelande utan att användaren behöver uppdatera sidan... så jag kom fram till var check; function checkForMessages() { $.get("/page.php", function($newpmsql) { if($newpmsql >= 1) { clearTimeout(check); alert("nytt meddelande!"); } } } setInterval(checkForMessages, 60
Läs frågan i sin helhet →joo det sant , men jag ser inte hur javascript koden är kopplad till php koden
var checkForMessages = function() {
$.get("/page.php", function(data) {
$("#userbar").html(data);
check = setTimeout(checkForMessages, 6000);
});
};
var check = setTimeout(checkForMessages, 6000);
ser ingen "$newpm_sql" nånstans, och detta är alllt jag använder som javascript för att uppdatera , jag kanske borde ha "$newpm_sql" istället för "data"?
men jag ser inte hur javascript koden är kopplad till php koden
Du skämtar där hoppas jag? det är ju $.get gör, den hämtar HTML/datan ifrån /get varje 6 sekund och stoppa in datan du få tillbaka in i #userbar
Så om /page.php ser ut:
<b>1000</b>
i HTML koden så är det vad data är i function(data)
Javascript har absolut ingen aning om vad PHP variabler har för värden
Mitt råd är:
ladda ner firefox + firebug
chrome
och kolla deras webbutvecklings verktyg för att se vad som händer på din sida. och hur ajax anropen körs och vad som retuneras.
Ok så då är det inte echo det hänger på :)
//Osäker men måste inte $newpm deklareras eller vad det heter
$newpm = "";
$newpm_sql = mysql_query("SELECT `id` FROM `pm` WHERE `to` = '". $_SESSION['id'] ."' AND `status` = '0'") or die(mysql_error());
if (mysql_num_rows($newpm_sql) >= 1)
{
$newpm = ' <b>('. mysql_num_rows($newpm_sql) .')</b>';
}
else
{
$newpm = '';
}
echo $newpm;
Har du något element med id som userbar då?
exempel
<div id="userbar"></div>
Annars vet ju inte $("#userbar").html(data); vart datan ska skrivas ut.
<head>
<meta name="keywords" content="" />
<meta name="description" content="" />
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title>test </title>
<link href="styles/snowglass/style.css" rel="stylesheet" type="text/css" media="screen" />
<script src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
</head>
<body>
<div id="userbar"></div>
<script type="text/javascript">
var checkForMessages = function() {
$.get("/page.php", function(data) {
$("#userbar").html(data);
check = setTimeout(checkForMessages, 6000);
});
};
var check = setTimeout(checkForMessages, 6000);
</script>
</body>
Tänk på att jquery.com kan ligga nere om man har otur så det är bättre att ha jquery i en egen js fil.
Tänk på att jquery.com kan ligga nere om man har otur så det är bättre att ha jquery i en egen js fil.
eller ännu bättre kör mot en cdn som google och kör en fallback på en lokal version av jquery:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>window.jQuery || document.write('<scr' + 'ipt src="/js/jquery-1.7.2.min.js"><\/scr' + 'ipt>')</script>
eller ännu bättre kör mot en cdn som google och kör en fallback på en lokal version av jquery:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script>window.jQuery || document.write('<scr' + 'ipt src="/js/jquery-1.7.2.min.js"><\/scr' + 'ipt>')</script>
(y)
jag är säker på att det är ingen problem med php-koden , problemet är scripten göra sidan visar page.php med en annan php fil, tex om vi är nu på page.php?name=search (search.php)så visar sidan innehållet som finns i search.php men efter 6 sekunder så blandar sidan innehållet från search.php med page.php...jag till och med testade med att lägga scripten i body vilket är body.php i mitt fall
Det få du ju ange då. För skrifter hämtar all HTML data från servern och lägger in det i det block du har sagt, om du måste ha en querystring lägg in det.
Den kommer inte göra något annat än vad som står i JS filen.
ojj missade ditt inlägg,men hur som helst... jag vet inte riktigt hur går till så skulle be väldigt tacksam om nån kunde visa :) ?
vilken url gå du till för att ge dig det rusultat du vill ha? Det är ju bara det som saknas, JS koden fungera
jag använder mig inte av url för att hämta resultatet jag har bara mysql-frågan i page.php , men jag kan skapa en php fil med endast Pm mysql-fråga i då kan jag hämta resultatet med hjälp av url
hur ser page.php koden ut? finns pm texten någonstans i resultatet som page.php retunera? om det är så så kan du leta upp det istället och använda den datan, men då behöver du visa den genererade HTML koden
page.php koden är bara en mysqal fråga(det har jag redan visat i tidigare inlägg), som är mer likt en funktion , resultatet visas i body.php med hjälp av $newpm
Du måste ju få ut ett resultat som man kan presentera
page.php kan se ut:
<b>1</b>
thats it om det är det du vill presetnera i din div med det specifika IDt det räcker inte att ha en PHP metod som aldrig körs i den, då retuneras ett tomt resultat på ditt ajax anorop.
titta på: http://www.webforum.nu/showpost.php?p=1549844&postcount=14 så ser du exakt vad som kommer hämtas ut från http://jsbin.com/uregod/ varje 6 sekund.
ojj jag ber om ursäkt jag missade ditt svar på inlägget men hur som helst låt oss gå tillbaka till problemet, nu är jag lite borta och inte förstår varför jag ska ha <b>1</b>, testade nyss skriptet då såg jag att antal meddelande uppdateras som den bör men problemet är att page.php laddas in i andra sidor som tex welcome.php eller att page.php laddas in igen i page.php, så va ska jag göra för att skippa omladdningen av page.php och ha ist bara meddelande uppdateringen.... tack så mycket för ditt tålamod
skapa en nytt php dokument med den datan du vill presentera i ditt ajax anrop om det är <b>1</b> där 1 är dynamiskt så gör det, om det är en hel sida du vill ladda in, gör det och ersätt befintliga dokumentet med det nya.
Om du kollar källkoden på http://jsbin.com/uregod/ så är det bara ett nummer som retuneras, det kunde ju ha varit html block, en hel sida eller vad som helst men det är ju upp till dig och säga "med det innehåll jag får från servern, var i det dokument som finns på webbsidan just nu skall ersättas med det nya?"
hej !
Jag vet är det väldigt sent att svara men om du har lust och tid så skulle jag bli tacksam för hjälpen , nu har jag gjort på det sättet .
Ajax.php
<?php
$newpm_sql = mysql_query("SELECT `id` FROM `pm` WHERE `to` = '". $_SESSION['id'] ."' AND `status` = '0'") or die(mysql_error());
if (mysql_num_rows($newpm_sql) >= 1)
{ $newpm = ' <b>('. mysql_num_rows($newpm_sql) .')</b>'; }
else
{ $newpm = '0'; }
?>
i body.php
<div id="userbar"><script type="text/javascript">
var checkForMessages = function() {
$.get("/ajax.php", function(data) {
$("#userbar").html(data);
check = setTimeout(checkForMessages, 6000);
});
};
var check = setTimeout(checkForMessages, 6000);
</script><?php echo $page_userbar; ?></div>
i page.php
$page_userbar =
'
<li><a href="page.php?name=pm">Mina Meddelande<b>'. $newpm .'</b></a></li>
';
ändå så funkar det inte ? , får följande error
Warning: mysql_query() [function.mysql-query]: Access denied for user 'a9205753'@'localhost' (using password: NO) in /home/a9205753/public_html/ajax.php on line 3
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/a9205753/public_html/ajax.php on line 3
Access denied for user 'a9205753'@'localhost' (using password: NO)
Om du ha problem med PHP så rekommendera jag att du ställer frågan i PHP forumet, i detta fall är det ju att du försöker ansluta dig till en databas du inte har access till.
ja , men ser inte var felet ligger ?
Läs felmeddelandet användaren a9205753 har inte rättigheter till databasen

