WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   AJAX - var börjar jag nysta? (https://www.wn.se/forum/showthread.php?t=18319)

Blackex 2006-12-27 09:30

Jag tänkte göra ett litet JavaScript som vi skall använda på vårt intranät. När man för musen över en viss länk skall information hämtas in från en server dynamiskt och visas i en liten informationsbubbla.

Informationen på servern finns tillgänglig i bland annat XML. Jag vill att det på klienten skall fungera på så många webbläsare som möjligt, helst skall informationen hämtas på ett säkert sätt, precis i onmouseover ögonblicket. Antar att AJAX är ett bra sätt att lösa detta med, men jag vet inte riktigt var jag skall börja nysta.

Charlie 2006-12-27 16:59

Det beror på hur mycket du vill lära dig. Antingen gör du det själv och lär dig massor. Eller, om du är helt ointresserad, så laddar du hem så mycket färdigt som möjligt och klipper ihop.

Men lär dig hantera javascript sedan är det i princip bara att googla på "ajax" och javascript för att hitta information om hur man skapar exempelvis GET-anrop och tar emot svar.

För bästa resultat bör du använda ett serverside-språk såsom exempelvis PHP eller ASP, som först kan tolka filen och skicka ut rätt del. Det gör så att betydligt mindre information behöver skickas över nätet.

Skulle en sådan bro vara out of question kan du fetcha xml-filen direkt och sedan plocka ut relevant information med Javascript. Men är XML-filen stor är det ett stort resursslöseri.

Blackex 2006-12-27 21:11

javascript, php, asp kan jag redan. men som jag förstått det är väl ajax ett helt framework som inkluderar säkra get-anrom m.m.?

grazzy 2006-12-27 22:02

Nej. Ajax är bara samlingsnamnet på tekniken att använda XML som överföringsmedium av data via javascript.

Jag har sagt det förrut, men titta på prototype, sitepoint har en del tutorials med just prototype (det är ett framework som jobbar med bland annat ajax).

Charlie 2006-12-29 18:16

Sedan kan jag förvisso anse att betydelsen av dessa "javascript-frameworks" är rätt överdriven. 50kb för ett framework som ger en lite syntetiskt godis vid kodning. 1 rad för att applicera en funktion på varje objekt i en array istället för att bara skriva ut for-loopen direkt - egentligen rätt meningslöst med tanke på vad man måste offra.

Jag tror att mycket av all denna hype beror på att många utvecklare tycker det är kul med något nytt. Nu när många börjar använda sig av javascript till större lösningar, "känns det bra att skriva nya metodanrop också" och därför ha olika frameworks som en brygga.

Däremot, ett stort men. Använder man ett framework som exempelvis Ajaxpro som interagerar med ett serverspråk som exempelvis ASP.NET, då talar vi om något helt annat, _betydligt_ mer användbart vid stora projekt.

Att kunna anropa ASP.net-klasser direkt ifrån klienten, skapa objekt, skicka fram och tillbaks, köra funktioner helt utan problem, konverteringar sköts automatiskt. Där har vi användbara ramverk för Ajax och Javascript.

Edit: Naturligtvis märker (som i taggar) man explicit vilka klasser och metoder som ska vara tillgängliga och kan lägga tid på att skydda dem mot skadliga anrop

Edit2: Har hört talas om att det ska finnas liknande för PHP, men har aldrig testat något.

Blackex 2007-01-03 09:38

Tack för alla svar!

Det jag inte förstår är hur man gör en httprequest i javascript UTAN att exponera den url man använder för att hämta datan. I mitt fall vill jag inte att andra skall kunna göra request mot min url, utan jag vill att det skall finns någon autentisering eller liknande. men implementerar man det i javascript blir ju det också väldigt lätt att lista ut. all kod står ju där i klartext. hur löser man det?

eg0master 2007-01-03 12:16

Eftersom du generar sidan som skall göra ajax anropet kan du ju t.ex. generera en liten biljett som du sedan skickar med ditt anrop från javascript. Jag menar alltså att när sidan genereras så skapar du i databasen en liten nyckel (slumptal t.ex.) som måste finnas med då URLen som skall hämtas med javascript anropas. Giltighetstiden på denna nyckel kan ju vara ganska kort.

Ett an nat sätt är ju självklart att använda sig av en referer-kontroll, men det kjan ju alltid fejkas (och jag vet inte om requesten från javascript lägger på det default). Men referer kan som sagt alltid fejkas enkelt.

Värt att notera är även att t.ex. firefox normalt inte tillåter att man från javascript accessar en annan host en just den sidan kommer ifrån. Dvs FF tillåter inte att du från sidan frontend.se via javascript gör en request mot backend.se även om det är samma maskin. frontend.se/some/other/script går ju dock självklart bra.

Blackex 2007-01-03 13:58

Ang. att man inte kan accessa en annan host: Hur gör exempelvis www. snap. com och pixel-grid . com/content/diggometer

den första hämtar dynamiskt in skärmdumpar. den andra hämtar in information om hur många som har diggat en viss nyhet. Detta sker så vitt jag förstår dynamiskt via javascript och httprequest, eller?

eg0master 2007-01-03 16:30

Vad ditt serverscript gör har ju inget med vad ditt javascript gör. Deras javascript gör med största sannolikhet en request till ett script på samma server som i sin tur gör externa requests för att hämta data. Inget konstigt med det.

Blackex 2007-01-03 16:36

Nja.. är du säker? I båda mina exempel räcker det väl med att inkludera ett javascript på sin sajt för att det skall fungera. Man behöver alltså inte lägga till något server side script för att det skall fungera. Så uppfattar jag det.

eg0master 2007-01-03 17:05

Ok, jag har ju inte kikat på vad det är och jag förstod inte att det var tjänster där du inkluderade andras tjänster på din sida det handlade om.

Ja, jag vet ju fortfarande inte vilka objekt de använder för att prata med servern, men jag har själv använt "XMLHttpRequest()" i FireFox och får då ett exception om jag inte går mot samma host som sidan ligger på.

Jag säger inte att det inte funkar, bara att det kanske inte funkar för alla klienter.

Blackex 2007-01-03 17:09

Om en sida på domän A inkluderar ett javascript från domän B. Kan då javascriptet använda XMLHttpRequest och hämta data från en sida på domän B? I så fall kan det vara så de har löst det.

Blackex 2007-01-07 09:49

Det verkar vara flera annonssystem som hämtar in data från externa servrar. Exempelvis adsense. Där inkluderar man bara ett javascript och annonserna hämtas in från googles servrar. Hur fungerar det? Jag har har också sätt att det finns ett annonssystem som gör vissa nyckelord klickbara. När man för musen över ett sådant ord hämtas data in om annonsören och visas för besökaren.

Jag har en känsla av att det är möjligt att hämta in data från en extern server. Frågan är bara hur man gör? :-)

Weaver 2007-01-08 08:02

Du kan hämta data med Ajax från externa servarar, kallas för en cross-domain request. Dock så kan du inte använda XMLHTTPRequest för detta utan måste göra anropet via te.x. en IFRAME istället.

Skapa IFRAMEN med javascript sätt dess onLoad handler till att peka mot en lämplig javascript funktion och sätt sedan src värdet för att hämta sidan. När sidan är färdigladdad så anropas funktionen du satte i onLoad.

Finns säkert bibliotek som kommer med denna funktionaliteten färdig. Om du vill börja förstå koncepten i Ajax så kan du titta på sajax (http://www.modernmethod.com/sajax/). Rätt så tajt skrivet bibliotek.

dotvoid 2007-01-08 09:43

Citat:

Ursprungligen postat av Charlie
50kb för ett framework som ger en lite syntetiskt godis vid kodning


Lite för onyanserat påstående för att jag ska hålla med. Många av ramverken, inkl Prototype, må vara ganska feta kodmässigt men sitter du och skapar mer avancerade applikationer vinner du massor på att använda ett ramverk. Både i snabbare och mer kvalitativ utveckling samt enklare underhåll. Strippar och komprimerar du sedan js-libbarna korrekt så är det inte alls någon overhead att tala om. Gör man ett enstaka anrop eller någon enstaka effekt på en webbsida kan jag hålla med om att de är lite tunga. Då finns det andra alternativ. Det finns dock många som jobbar med webbsiter och projekt där dessa ramverk fyller sin syfte.

Citat:

Ursprungligen postat av Charlie
Edit2: Har hört talas om att det ska finnas liknande för PHP, men har aldrig testat något.

Jag gjorde lite tester och skapade ett sådant ramverk för PHP för snart ett år sedan som finns beskrivet på http://www.dotvoid.com/view.php?id=35 och http://dotvoid.com/garage/toxicexamples/ men. Det var bara tester och det finns en uppdaterad version som fungerar betydligt bättre med mindre manuellt kodande men tyvärr är det inte publikt. Det tillåter i alla fall att man instansierar PHP-klasser som javascript-objekt. Anrop mot metoder i javascript-objekten omvandlas i bakgrunden till riktiga anrop på motsvarande instansierade PHP-objekt.

Fram till dess att javascript får pålitligt stöd för continuations blir det dock aldrig riktigt intressant. Det är trist med alla callbacks. (Jag vet att det finns mer eller mindre meckiga workarounds for continuations.)

Blackex 2007-01-08 12:40

Weaver: Funkar IFrames i alla browsers? Vet du om det går att positionera en IFrame vart som helst på en sida, dvs som ett vanligt lager?

dotvoid: vad finns det för verktyg för att strippa och komprimera ett javascript? helst ett som döper om funktioner och variabler så att de blir så korta som möjligt.

Weaver 2007-01-08 12:49

Citat:

Originally posted by Blackex@Jan 8 2007, 13:40
Weaver: Funkar IFrames i alla browsers? Vet du om det går att positionera en IFrame vart som helst på en sida, dvs som ett vanligt lager?
IFrames fungerar i alla moderna webbläsare.

Du ska inte positionera den. Sätt den som hidden istället.
#iFrame {
visibility: hidden;
height: 1px;
}

Blackex 2007-01-08 13:01

Hidden? Varför? Är det för att jag skall slippa skapa en ny hela tiden, dvs så att jag kan återanvända den?

Min tanke är alltså att dynamiskt hämta innehåll från en extern sida. När man för musen över en viss länk så skall innehållet dyka upp i en liten ruta precis bredvid länken. Innehållet skall bero på innehållet i url:en.

Så här verkar man kunna lösa det:

Dels behöver jag ett javascript som kollar av vilka länkar på sidan som skall trigga "popup-lagret". Koden för det är i princip klart.

Sedan har jag tänkt att jag då (vid triggern) dynamiskt (med javascript) skapar en iframe med en src-url till den externa servern, med orginal url:en som argument. Iframen positionerar jag så att den dyker upp precis vid länken.

På server sidan tas url:en emot och baserat på url retuneras rätt innehåll.

På detta sätt verkar jag inte ens behöva ajax... Men jag är inte helt säker på att min lösning fungerar i alla browsers etc.

Blackex 2007-01-08 13:39

För att förtydliga. Det är alltså någonting liknande som detta jag är ute efter.

Weaver 2007-01-08 13:47

Aaah, trodde bara du skulle använda IFramen för att kommunicera. Därför sa jag att du skulle sätta den som hidden för att den skulle vara osynlig för användaren.

Trodde nämligen att du skulle göra popupen med en absolut-placerad div

dotvoid 2007-01-08 14:27

Dojos komprimering anses nog vara den säkraste även om det finns många med bra kvalitet.
* http://dojotoolkit.org/docs/compressor_system.html

Optimera nedladdning är mer än att bara komprimera javascript. Här är ett par bra texter i ämnet:
* http://www.thinkvitamin.com/features...avascript-fast
* http://rakaz.nl/item/make_your_pages..._and_css_files
* http://yuiblog.com/blog/2006/10/16/pageweight-yui0114/


Alla tider är GMT +2. Klockan är nu 12:03.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson