01. juli 2012 - 20:10Der er
16 kommentarer og 1 løsning
Køre script uden at vente på svar
Hej
Jeg har: form.php (en html form)
modtaget.php (modtager form indhold og kalder en funktion der laver en pdf og sender den med i en mail. Efter fuktionen er færdig vises der en besked til brugeren)
Pga. af det tager en del tid at generere PDF'en og sende mailen, så går der også langtid inden bruger ser beskeden om at formen er modtaget.
Nogle bud på hvordan jeg i modtaget.php kan kalde en anden php fil, og at modtaget.php kan køre viderer uden at skulle afvente at det kaldte script bliver færdig (pdf generering + mail afsendelse)?
Du kan blot kalde din modtaget.php med AJAX, så kaldet foregår asynkront. Du opnår samme resultat som med iframe, men det er en del mere tidssvarende at anvende AJAX (og i øvrigt også utroligt godt understøttet af de fleste script-biblioteker).
Så gerne. Du kan opnå det samme ved at submitte formularer i gemte iframes, som hvis du anvender ajax (dvs browserens XMLHttpObject, som er forskelligt fra browser til browser).
Da spørgeren formentlig vil søge yderligere vejledning på google baseret på de svar han/hun får her, er det rart at vide at metoden med iframes langt fra anvendes i lige så høj grad idag som den gjorde tidligere, idet stigende AJAX support har gjort denne form for opgaver betydeligt mere simple. Der vil derfor være mere vejledning at finde ved søgning på dette, da iframe metoden må anses for at være deprecated sammenlignet med at anvende AJAX.
Så kort og godt, blot et godt råd til spørgerens videre søgning :)
"da iframe metoden må anses for at være deprecated sammenlignet med at anvende AJAX."
Nej, tværtimod. IFRAME gled ud og eksisterede ikke i HTML 4.01, men vil - grundet sin store anvendelighed - igen være med inde i varmen, når HTML 5 (måske senere på året) bliver gældende standard.
"stigende AJAX support har gjort denne form for opgaver betydeligt mere simple. Der vil derfor være mere vejledning at finde ved søgning på dette"
Tværtimod er langt det meste, der bliver skrevet på WWW om Ajax frygtelig forvrøvlet - og skrevet af folk, der ikke selv har fattet en bjælde af teknikken. Et af de værste eksempler må nok siges at være w3schools.com's parodi på en tutorial.
I spørgers tilfælde vil det være overkill at benytte et XMLHttpRequest objekt, da der kun er tale om envejskommunikation.
Da du netop bruger 'simpelhed' som argument, går jeg udfra, vi kan blive enige om, at det er lasngt simplere at subitte formen mod en IFRAME. Det kan oven i købet gøres i ren HTML - helt uden at blande scripting ind i processen. Desuden er metoden i øvrigt i sig selv kompatibel med X-domain requests.
"da iframe metoden må anses for at være deprecated sammenlignet med at anvende AJAX."
Nej, tværtimod. IFRAME gled ud og eksisterede ikke i HTML 4.01, men vil - grundet sin store anvendelighed - igen være med inde i varmen, når HTML 5 (måske senere på året) bliver gældende standard.
Er bange for at vi kommer til at vente noget længere på, at HTML 5 bliver gældende standard, men så er vi da ihvertfald to som håber. Det være sagt, så var jeg ikke klar over at iframe ville komme tilbage i folden. Det vil jeg bestemt nyde til den tid.
"stigende AJAX support har gjort denne form for opgaver betydeligt mere simple. Der vil derfor være mere vejledning at finde ved søgning på dette"
Tværtimod er langt det meste, der bliver skrevet på WWW om Ajax frygtelig forvrøvlet - og skrevet af folk, der ikke selv har fattet en bjælde af teknikken. Et af de værste eksempler må nok siges at være w3schools.com's parodi på en tutorial.
Du vil aldrig nogensinde se mig anbefale w3schools.com, som efter min mening er noget af det værste du kan begive dig ud i.
I spørgers tilfælde vil det være overkill at benytte et XMLHttpRequest objekt, da der kun er tale om envejskommunikation.
Da du netop bruger 'simpelhed' som argument, går jeg udfra, vi kan blive enige om, at det er lasngt simplere at subitte formen mod en IFRAME. Det kan oven i købet gøres i ren HTML - helt uden at blande scripting ind i processen. Desuden er metoden i øvrigt i sig selv kompatibel med X-domain requests.
Det jeg ville frem til i mit oprindelige svar til spørgeren var at finde ud af, om han/hun i forvejen anvender jQuery. Er det tilfældet ville jeg anbefale at anvende et jQuery.post ajax kald. Men vi kan jo have forskellige meninger.
Selv som gammel feltartillerist 255 mm trukken kanon og 105 mm haubitz, vil jeg klart hælde til, at en mindre kaliber vil være alt rigelig til den givne opgave.
Der er ingen grund til at hive et større library ud af skabet og scripte sig til noget, som konceptuelt hører til i markup delen (submit af en form), uden at vinde noget ved det. Løsningen er i forvejen indbygget i markup standarden. Det er jo præcis årsagen, FORM tagget har mulighed for en target attribut =)
Nu ved jeg jo ikke hvilke variabler din modtaget.php forventer, men lad os antage at den kigger efter $_POST["name"], $_POST["message"] og $_POST["email"].
I din form.php kan du via jQuery samle værdierne op fra formularen, og opbygge følgende object (du bør naturligvis validere den indsamlede data, men det udelader vi her for nemhedens skyld):
var data = {'name':'vels', 'message':'hello world', 'email':'vels@velsworld.com'};
Denne data kan du nu sende til din modtaget.php med følgende jQuery kommando:
Ole, kan du evt. poste et eksempel (eller linke til et) som anvender iframe metoden? Giver god værdi for tråden, at begge muligheder vises, og samtidig kan man se hvordan det kan gøres udelukkende i html.
... og endelig vil jeg også gerne personligt se et eksempel :)
Mjaaahhh ... det var nok ikke den mest begavede CSS =)
style="position:absolute;left:1000em">
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.