---
title: "kolla efter nya meddelande utan siduppdatering?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/189631-kolla-efter-nya-meddelande-utan-siduppdatering"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "vagann"
published: "2012-04-17T20:01:17.000Z"
updated: "2012-07-01T14:58:33.000Z"
replies: 53
views: 3047
page: 1
pages: 3
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/189631-kolla-efter-nya-meddelande-utan-siduppdatering"
---

# kolla efter nya meddelande utan siduppdatering?

_Sida 1 av 3._

## #1 — vagann, 2012-04-17T20:01Z

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 

```php
var check;
function checkForMessages() {
    $.get("/page.php", function($newpm_sql) {
        if($newpm_sql >= 1) {
                      clearTimeout(check);
            alert("nytt meddelande!");
        }
    }
}

setInterval(checkForMessages, 60000);-
```

 det är en kod som jag skrev eftersom jag inte kan sånt så bra så vill jag att kolla upp koden , är den rätt? skulle den funka\`?

Permalänk: https://www.webforum.nu/p/189631

## #2 — voigtann1, 2012-04-17T20:08Z

Du sätter ju aldrig variablen check till en timeout/interval, så att cleara den hjälper inte något, sen skall din /page.php retunera ett nummer (även om den kommer returnera en sträng).

Sen gillar jag inte setInterval... metoden kan ju ta mer än 6 sekunder att köra (även om det inte är i detta fallet)

Permalänk: https://www.webforum.nu/p/2297691

## #3 — l-boy, 2012-04-17T20:10Z

Det ser väl bra ut, om nu page.php returnerar hur många nya meddelanden som finns. Fungerar det inte?

Permalänk: https://www.webforum.nu/p/2297692

## #4 — vagann, 2012-04-17T20:11Z

kan du eller någon som har lust att fixa det jag har missat? , som sagt eftersom jag är inte så bra på sånt:)

Permalänk: https://www.webforum.nu/p/2297693

## #5 — voigtann1, 2012-04-17T20:13Z

är ju svårt att säga då jag har ingen aning om vad din page.php retunera för data.

Permalänk: https://www.webforum.nu/p/2297695

## #6 — vagann, 2012-04-17T20:15Z

jag tror att du frågar efter detta ? 

```php
$newpm_sql = mysql_query("SELECT `id` FROM `pm` WHERE `to` = '". $_SESSION['id'] ."' AND `status` = '0'") or die(mysql_error());
```

Permalänk: https://www.webforum.nu/p/2297696

## #7 — voigtann1, 2012-04-17T20:16Z

och den retunera vad? ett tal alltid?

Permalänk: https://www.webforum.nu/p/2297697

## #8 — vagann, 2012-04-17T20:27Z

nej , inte om det inte finns minst 1 meddelande , egentligen så körde jag message alert med 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 = ''; }
```

men eftersom den inte uppdateras av sig själv så vill jag kör ajax/javascript

Permalänk: https://www.webforum.nu/p/2297698

## #9 — voigtann1, 2012-04-17T20:36Z

Nu blandar du PHP och javascript. för det första så är PHP ett server språk och javascript är ett klientspråk för webbläsaren, $newpm måste skrivas ut på php sidan då javascript inte har någon som helst tillgång till några server variabler.

Nu känner jag att jag måste förklara lite hur jquery.get fungera:

get har en callback metod:

```
$.get("/page.php", function($newpm_sql) {
        if($newpm_sql >= 1) {
        }
    });
```

i denna kod-block så är det function($newpm_sql) {} som är det callback block som kommer köras så fort ajax anropet har lyckats. Metoden har en parameter och det är den data som retuneras ifrån servern ( i ditt fall verkar det inte vara något då du inte har echo på $newpm, men vi säger att du har detta och då kommer $newpm_sql innehålla ' \<b\>(xxx)\</b\>' eller '' 

Om vi har en HTML markup på sidan som ser ut som:

\<div id="new_pm"\>\</div\> eller om du nu presentera $newpm från php (samma resultat som i din page.php)

så kan du ha:

```
var checkForMessages = function() {
	$.get("/page.php", function($newpm_sql) {
        $("#new_pm").html($newpm_sql);
    }
};
```

Så kommer den uppdatera DOM-elementet med ett id med #new_pm med datan som ajax anropet får från serven.

jag hade gjort Javascripts koden:

```
var checkForMessages = function() {
	$.get("/page.php", function(data) {
        $("#new_pm").html(data);
		check = setTimeout(checkForMessages, 6000);
    }
});
var check = setTimeout(checkForMessages, 6000);
```

för att den bara skall hämta varje 6 sekund efter en lyckad hämtning av page.php

Permalänk: https://www.webforum.nu/p/2297699

## #10 — vagann, 2012-04-17T20:58Z

ok tack för förklaringen, nu tror jag att jag fattar hur det går till .. och det är bara det , behöver inte lägga nåt mer i html strukturen , right?
går och testar den nu :D

Permalänk: https://www.webforum.nu/p/2297700

## #11 — voigtann1, 2012-04-17T21:07Z

page.php behöver bara retunera det du vill presentera i #new_pm

Permalänk: https://www.webforum.nu/p/2297701

## #12 — vagann, 2012-04-19T19:45Z

ok så blev det för mig (detta är i page.php ,head delen medan diven är i body.php) 

```
<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>
```

men det funkade inte, har jag gjort fel nånstans?

Permalänk: https://www.webforum.nu/p/2297755

## #13 — voigtann1, 2012-04-19T19:49Z

lägg upp koden eller berätta vad konsollen säger att det bli för fel.

Permalänk: https://www.webforum.nu/p/2297756

## #14 — voigtann1, 2012-04-19T19:51Z

det saknas ) i koden:

```
var checkForMessages = function() {
	$.get("/page.php", function(data) {
		$("#userbar").html(data);
		check = setTimeout(checkForMessages, 6000);
	});
};
var check = setTimeout(checkForMessages, 6000);
```

 demo: <http://jsbin.com/otusoz/edit#javascript,html,live>

Permalänk: https://www.webforum.nu/p/2297757

## #15 — vagann, 2012-04-19T19:52Z

vilken kod begär du ?

Permalänk: https://www.webforum.nu/p/2297758

## #16 — voigtann1, 2012-04-19T19:57Z

Ingen längre, provade koden och fick felmeddelande direkt om att metoden aldrig avslutas.

Permalänk: https://www.webforum.nu/p/2297759

## #17 — vagann, 2012-04-19T20:19Z

jaha ok , det är ganska konstigt att min server ger inga felmeddelande.. men hur som helst så såg jag att funkade jsbin och jag har exakt samma koder men ett problem har uppstått att sidan anropar page.php i ett annat sida tex ...page.php?name=pm så vi kanske bör uppdatera utan att anropa ett specifikt file .

ps: jag tror att min server har bannat mig ,för att nå min hemsida måste jag använda proxy, jag ska fixa det, återkommer lite senare:)

Permalänk: https://www.webforum.nu/p/2297761

## #18 — voigtann1, 2012-04-19T20:24Z

Servern kan bara generera ett fel och det vid ajax anropet, men det är felaktig JS struktur så säger webbläsaren till att det är fel (de flesta webbläsare har en konsol/felkonsol)

vad få du för html kod när du besöker page.php direkt?

Permalänk: https://www.webforum.nu/p/2297762

## #19 — stattin, 2012-04-19T22:30Z

Får en känsla att det är echo som saknas, vi har varit inne på det här förut jag och Vagann.

Om du skriver PHP och du vill att något ska visas på sidan så måste du använda dig av echo.

```php
$str = "Hello world!";
echo $str;
```

(Finns lite andra varianter också men det får du läsa om [här.](http://php.net/manual/en/function.echo.php))

Samma sak gäller när du använder dig av ajax, skriv dina php script precis som vanligt, det som ska visas för användaren måste ekas (echo) ut helt enkelt.

Jag antar att det här INTE är hela PHP koden, MEN om det skulle vara det så skulle det räcka med ett lite echo $newpm längst ner.

```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 = ''; } 

echo $newpm;
```

Så skulle $newpm; matas ut på sidan och det kommer tillbaka till function(data).

Och beror det inte på detta så fortsätter vi felsökningen, men du får kanske visa mer av php koden, för ajax scriptet är ju i sin ordning.

Permalänk: https://www.webforum.nu/p/2297765

## #20 — vagann, 2012-04-20T01:19Z

voigtann här är html koden 

```
<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>
<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>
</head>
```

 säg till om du behöver hela html koden !

stattin , jo det var hela php koden och jag använder mig redan av echo för att skriva ut antal meddelande men det som vi försöker göra här är att få antal meddelande att uppdatera sig utan siduppdatering.... just nu är det så att användaren måste uppdatera sidan (f5) för att antal meddelande ska också uppdateras

Permalänk: https://www.webforum.nu/p/2297767

---

Tråden på webben: https://www.webforum.nu/amne/javascript/189631-kolla-efter-nya-meddelande-utan-siduppdatering  
Nästa sida: https://www.webforum.nu/amne/javascript/189631-kolla-efter-nya-meddelande-utan-siduppdatering/page2.md
