webForumDet fria alternativet

Problem med Ajax (Hämta Info)

ASP

17 svar · 846 visningar · startad av SGuncel

Medlem sedan jan. 2007217 inlägg
Frågan#1

Har försökt och hämta info från databasen utan att uppdatera sidan men får ej Ajax fungera.

Jag skulle vilja skriva ut Lajv meddelanden på sidan utan att uppdatera framen.

Så här ser mina koder ut:
Själva meny sidan där de ska skrivas ut + att javascript koden är med.
http://www.aspsidan.se/code/default.asp?c=7853

Här skrivs alla meddelande ut:
http://www.aspsidan.se/code/default.asp?c=7854

Kollat på artikeln i ASPsidan och har gjort.
http://www.aspsidan.se/default.asp?page=readArticle&artId=533

Medlem sedan juni 20019 519 inlägg
#2

vad händer? Eller vad händer inte rättare sagt?

Medlem sedan dec. 20025 483 inlägg
#3

...samt: det saknas apostrofer kring argument #2 i

http_request.open('GET',menu.asp, true);
Medlem sedan jan. 2007217 inlägg
#4

voigtann1 skrev:

vad händer? Eller vad händer inte rättare sagt?

Det blir bara blank, alltså det skrivs inget.

Medlem sedan juni 20019 519 inlägg
#5

javascript fel? tips - Ladda ner Firebug till Firefox så kan du även se vad som skickas och vad du får i retur med ajax.

Medlem sedan jan. 2007217 inlägg
#6

Den hitta inte något fel. Nej då, ingen fel på javascript koden.
Men fick denna svaret:
menu is not defined
makeRequest("BCMessages.asp?rnd=0.8914897498095955")menu.asp (line 46)
[Break on this error] http_request.open('GET',menu.asp, true); //Här skickas parametern URL in.

Medlem sedan dec. 20025 483 inlägg
#7

Peter S skrev:

...samt: det saknas apostrofer kring argument #2 i

http_request.open('GET',menu.asp, true);

(y)

Medlem sedan jan. 2007217 inlägg
#8

Det börjar hända grejer men det skrivs ändå inte ut :S
Så här står det:
GET New/BCMessages.asp (63ms) menu.asp (line 47)

jag tror att det är nåt fel här:

http_request.send(null); //och så sker anropet med SEND()

Peter S, gjorde det du sa. Efter det fick jag denna resultatet.

Medlem sedan dec. 20025 483 inlägg
#9

Får du något felmeddelande?

Medlem sedan jan. 2007217 inlägg
#10

Neej, denna script skrivs ut på sidan men det visas inte.

<!-- #include file="DB.asp" --><!-- #include file="RegExp.asp" -->
<%
	Set ObjRS = ObjConn.Execute("Select * From BC ORDER BY BCTime desc LIMIT 10")	
%>
<script type="text/javascript">
/*Example message arrays for the two demo scrollers*/
var pausecontent2=new Array()
<% Dim i
i = 0
Do until ObjRS.Eof
        If i = 10 Then Exit Do

Response.Write "pausecontent2[" & i & "]='<span class=""LastBCUserName""><a href=""../UsrProfile/Profil.asp?UsrID=" & Replace(ObjRS("UsrID"),"'","\'") & """ target=""Start"">" & Replace(ObjRS("UsrTLAlias"),"'","\'") & "</a>:</span> <span class=""LastBCMessage"">" & Replace(byt(ObjRS("BCMessage")),"'","\'") & "</span>';" & vbcrlf

	i = i + 1
	ObjRS.MoveNext
Loop
%>
</script>
Medlem sedan dec. 20025 483 inlägg
#11

Vad gör pausescroller()? Den delen av koden skrivs nämligen över...

Medlem sedan jan. 2007217 inlägg
#12

När jag klickar på "Log calls to makeRequest"
Får jag detta:
makeRequest("menu.asp?rnd=0.9509537453179723")menu.asp (line 20)
GET New/BCMessages.asp (78ms)menu.asp (line 47)

Jag ändrade på BCMessage.asp och skrev "hejsan" dp skrevs det ut när jag klickade på "Log calls to makeRequest". Men nu så fungerar det inte.

Ska jag skriva något adress i URL?

function makeRequest([b]url[/b]) { //Märk väl att vi skickar in sidan som vi ska öppna som parameter (url)

EDIT:
Det är scriptet som skriver ut Lajvmeddelanden.
Här kan du se: http://www.dynamicdrive.com/dynamicindex2/crosstick.htm

Medlem sedan dec. 20025 483 inlägg
#13

Nej, det verkar vara meningen att du skall skriva

http_request.open('GET', url, true);
Medlem sedan jan. 2007217 inlägg
#14

När jag gjorde så så fick jag felet:
missing formal parameter
[Break on this error] function makeRequest('BCMessages.asp') { //Märk väl att vi skickar in sidan so...

Medlem sedan dec. 20025 483 inlägg
#15

Står det så här i din kod nu

function makeRequest('BCMessages.asp'){

?

I sådana fall skall du ändra det till vad det var innan. I stället skall du på den kodraden jag senast postade, byta ut 'menu.asp' till url.

Radera följande stycke från din kod:

<script type="text/javascript">
//new pausescroller(name_of_message_array, CSS_ID, CSS_classname, pause_in_miliseconds)

new pausescroller(pausecontent2, "pscroller2", "someclass", 10000)

</script></

Skapa en <div> eller någon annan "behållare" och sätt ett id = "pausecontent" på den.

Lägg till följande ovanför function makeRequest() innanför <script>:

var isFirstTime = true;

Modifiera alertContents() till:

function alertContents(http_request) { //Det är hit vi kommer sen

  if (http_request.readyState == 4) { //Om allt har laddat klart...
  if (http_request.status == 200) { //kontrollera ifall allt är OK, för isåfall...
  document.getElementById('pausecontent').innerHTML = http_request.responseText; //hämta texten och visa den i en DIV (lajv)
    if (isFirstTime){
      isFirstTime = false;
      new pausescroller(pausecontent2, "BCMessages", "someclass", 10000);
    }
  } else {
  document.getElementById('BCMessages').innerHTML = "Ett fel uppstod vid hämting av Broadcast meddelanden."; //...annars så har något gått snett
  }
  }
Medlem sedan jan. 2007217 inlägg
#16

Nästan så har jag löst allt, men det är bara en sak kvar :)
Allt på koden jag kommer visas men förutom lajv meddelanden. Lajv meddelanden visas där allt skrivs ut innan den kommer till sidan där de egentligen ska visas.

Här är allt som skrivs ut innan den kommer till "menulogin.asp"
Här kan jag se allt till och med lajv meddelanden. Allt fungerar som det ska på denna sida.
LastLogin.asp

<!-- #include file="DB.asp" --><!-- #include file="RegExp.asp" -->
<html>
	<head>
	
<link rel="stylesheet" href="../_Style/ToppStyle.css" type="text/css">
<script src="BC_Message_Script.js" language="JavaScript" type="text/javascript"></script>
	
<%
	Set ObjRS = ObjConn.Execute("Select * From BC ORDER BY BCTime desc LIMIT 10")	
%>
<script type="text/javascript">
/*Example message arrays for the two demo scrollers*/
var pausecontent2=new Array()
<% Dim i
i = 0
Do until ObjRS.Eof
        If i = 10 Then Exit Do

Response.Write "pausecontent2[" & i & "]='<span style=""font-weight:bold""><a href=""../UsrProfile/Profil.asp?UsrID=" & Replace(ObjRS("UsrID"),"'","\'") & """ target=""Start"">" & Replace(ObjRS("UsrTLAlias"),"'","\'") & "</a>:</span> " & Replace(byt(ObjRS("BCMessage")),"'","\'") & "';" & vbcrlf

	i = i + 1
	ObjRS.MoveNext
Loop
%>
</script>
	</head>

<body>

</body>

</html>

<%
	Set ObjRS2 = ObjConn.Execute("Select * from TLUsers where UsrStats='Online' order by UsrLastLogin DESC LIMIT 1")
																													%>
						<table border="0" cellpadding="0" cellspacing="0" height="42" width="891">
							<tr>
								<td>
									<table border="0" cellpadding="0" cellspacing="0" height="59" width="888">
										<tr>
											<td height="59" width="56" style="padding-left: 1px;">							
												<%
													IF Len(ObjRS2("UsrPic")& "") > 0 then
												%>
												<img src="<%=ObjRS2("UsrPic")%>" width="56" height="59">
												<%		
														else
												%>
												<img width="56" height="59" src="../_Grafik/ingen_bild.gif">
												<%
													End if
												%>
								
											</td>
								
											<td height="59" width="320" style="padding-top: 38px; padding-left: 10px;">
												<span class="LastLoginBlack"><strong><%=ObjRS2("UsrTLAlias")%></strong> har precis loggat in</span> <span class="LastLoginGrey">- <%=FormatDateTime(ObjRS2("UsrLastLogin"),vbshorttime)%></span>
											</td>
								
											<td height="59" width="500">
											</td>
								
										</tr>
									</table>
<%
	ObjRS2.Close : Set ObjRS2 = Nothing
										%>
									
											<!-- 
												HÄR SLUTAR LOGIN OCH HÄR BÖRJAR BROADCAST
																						 -->
									
										<table border="0" cellpadding="0" cellspacing="0" height="25" width="887">
											<tr>
												<td height="25" width="59">
													<a href="../BC/Broadcast_Send.asp">
													<img src="pxl.gif" width="58" height="21" border="0"></a>
												</td>
												<td height="25" style="padding-top: 0px; padding-left: 8px;">					
                  									<script type="text/javascript">
														new pausescroller(pausecontent2, "pscroller2", "someclass", 10000)
				 									</script>
												</td>

											</tr>
										</table>
<%
	ObjRS.Close : Set ObjRS = Nothing
										%>
								</td>
							</tr>
						</table>

Det är här allt som ska visas.
Men här kan man inte se lajv meddelanden. Får ingen fel meddelande och inget fel på javascript koden.
menulogin.asp:

<!-- #include file="DB.asp" --><!-- #include file="LoginCheck.asp" --><!-- #include file="RegExp.asp" -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
	<head>
		<meta http-equiv="Content-Language" content="sv">
		<!-- 
	Copyright © 2005-2007 .
 -->
<title></title>
<meta name="copyright" content="Copyright © 2005-2007">
<meta name="description" content="Din Community På Nätet">
<meta name="keywords" content="">
<meta name="author" content="">

		<link rel="stylesheet" type="text/css" href="menu.css">
<script src="LastLogin.js" language="JavaScript" type="text/javascript"></script>

	</head>
	<body leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0">

			<table border="0" cellpadding="0" cellspacing="0" width="893" height="79">
				<tr>
					<td id="Topsidan" class="topContainer" height="79">
					</td>
				</tr>
			</table>
	
					
	</body>
</html>

Och tillsist så kommer Ajax javascript koden.
Lastlogin.js:

  function makeRequest(url) { //Märk väl att vi skickar in sidan som vi ska öppna som parameter (url)
  var http_request = false;

  if (window.XMLHttpRequest) { // Detta är fö Mozilla, Safari, ...
  http_request = new XMLHttpRequest();
  if (http_request.overrideMimeType) {
  http_request.overrideMimeType('text/xml');
  // See note below about this line
  }
  } else if (window.ActiveXObject) { // Detta är för Internet Explorer

  try { //Här måste vi köra en try och catch för IE så vi får rätt objekt
  http_request = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
  try {
  http_request = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e) {}
  }

  }

  if (!http_request) { //om anropet är fortfarande falskt så har vi inte lyckats, varna om det
  alert('Kunde inte hämta senaste inloggade.');
  return false;
  }

  http_request.onreadystatechange = function() { alertContents(http_request); }; //Nu pekar vi på den funktionen vi vill aktivera
  http_request.open('GET','Lastlogin.asp', true); //Här skickas parametern URL in
  http_request.send(null); //och så sker anropet med SEND()

  }

  function alertContents(http_request) { //Det är hit vi kommer sen

  if (http_request.readyState == 4) { //Om allt har laddat klart...
  if (http_request.status == 200) { //kontrollera ifall allt är OK, för isåfall...
  document.getElementById('Topsidan').innerHTML = http_request.responseText; //hämta texten och visa den i en DIV (lajv)
  } else {
  document.getElementById('Topsidan').innerHTML = "Ett fel uppstod vid hämting av senaste inloggade."; //...annars så har något gått snett
  }
  }

  }

  //Här skapar jag en timer som ska anropa min sida var 10:e sekund
  //Detta är självklart valfrimakeRequesttt, du kan välja att istället använda en länk för att aktivera det hela
  //Märk väl att jag använder mig av Math.random() i länken, jag ska förklara nedan varför.
  var interval = setInterval("makeRequest('menulogin.asp?rnd='+Math.random())",10000);

Vad kan felet vara?

Medlem sedan jan. 2007217 inlägg
#17

Kan man ha flera Ajax script på en sida?

Medlem sedan juni 20019 519 inlägg
#18

ja.. men inte samma funktions namn för anropen... du kan bygga en global funktion som hämtar saker med AJAX men ändra olika div / span / taggar med anroppen från olika sidor. Men man ska inte bli allt för "beroende" av Ajax... använd det bara där det kan behövas :)

278 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
153 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)