![]() |
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. |
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. |
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.?
|
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). |
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. |
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? |
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. |
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? |
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.
|
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.
|
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. |
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.
|
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? :-) |
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. |
Citat:
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:
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.) |
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. |
Citat:
Du ska inte positionera den. Sätt den som hidden istället. #iFrame { visibility: hidden; height: 1px; } |
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. |
För att förtydliga. Det är alltså någonting liknande som detta jag är ute efter.
|
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 |
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