ajax prototype posts in FF
Ik ben op mijn site ajax aan het invoeren alleen lukt dat niet echt.
Ik heb het middelscherm waar steeds de verschillende pagina's laden in ajax.
En elke pagina kan dan door ajax ook weer veranderen (ajax in ajax)
Nu heb ik op een paar pagina's forms en die moeten met ajax verstuurd worden en dat doe ik zo:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
// op de pagina zelf:
<input type="button" name="submit" value="Send" class="buttons" onClick="send('pb', 'middle', 'pb.php?actie=comp')";> // de button om het form te verzenden
// hier onder een javascript functie om prototype aan het werk te zetten
function send(form, div, pagina){
var params = Form.serialize($(form));
new Ajax.Updater(div, pagina, {asynchronous:true , evalScripts:true , parameters:params});
}
<input type="button" name="submit" value="Send" class="buttons" onClick="send('pb', 'middle', 'pb.php?actie=comp')";> // de button om het form te verzenden
// hier onder een javascript functie om prototype aan het werk te zetten
function send(form, div, pagina){
var params = Form.serialize($(form));
new Ajax.Updater(div, pagina, {asynchronous:true , evalScripts:true , parameters:params});
}
Nu werkt dit op deze manier goed (in IE) maar het probleem is dat het met firefox niet werkt! En forms met ajax in AJAX versturen kan wel! Maar wat doe ik dan fout?
Je kunt ajax beter gebruiken om je site te verfraaien, maar het is eigenlijk bedoeld voor webapplicaties.
Maar als ik het toch WEL wil? Wat doe ik dan fout?
gr, tim
@phpnewbie:
Ik ben het er mee eens dat je AJAX niet voor navigatie moet gebruiken, maar wat bedoel je met dat 'verfraaien'? Daar snap ik helemaal niets van.
Edit:
Zijn probleem is het versturen van een formulier via AJAX en dat is iets heel normaals. Het gaat dus helemaal niet over de navigatie.
Zijn probleem is het versturen van een formulier via AJAX en dat is iets heel normaals. Het gaat dus helemaal niet over de navigatie.
Gewijzigd op 01/01/1970 01:00:00 door Simon Blok
En over ajax als navigatie gebruiken: In veel tutorials word gmail als goed voorbeeld gegeven van ajax, daar gebruiken ze ajax toch echt als navigatie ...
Maar zullen we even ontopic blijven? Ik zal kijken of ik mijn probleem even wat beter kan opschrijven:
De pagina waarin het form staat: (dus staat door navigatie al in ajax)
ik heb hem verkort tot alleen de dingen die van belang kunnen zijn ...
Code (php)
1
2
3
4
2
3
4
header('Content-Type: text/javascript'); // om javascript te laten werken omdat hij al door ajax is geladen ...
<form name="pb">
//het hier nog allerlei code .... (waaronder een textarea die 'bericht' heet)
<input type="button" name="submit" value="Send" class="buttons" onClick="send('pb', 'middle', 'pb.php?actie=comp')";>
<form name="pb">
//het hier nog allerlei code .... (waaronder een textarea die 'bericht' heet)
<input type="button" name="submit" value="Send" class="buttons" onClick="send('pb', 'middle', 'pb.php?actie=comp')";>
Dan op de php pagina waar de ajax naar toe gaat:
(ook weer verkort)
En als laatste een javascript functie die prototype laat werken, deze functie word aangeroepen door om de button te klikken (zie onClick hierboven)
Code (php)
1
2
3
4
2
3
4
function send(form, div, pagina){
var params = Form.serialize($(form));
new Ajax.Updater(div, pagina, {asynchronous:true , evalScripts:true , parameters:params});
}
var params = Form.serialize($(form));
new Ajax.Updater(div, pagina, {asynchronous:true , evalScripts:true , parameters:params});
}
Wat gaat er fout:
In IE gaat er niks fout, als ik op de button klik stuurt hij de gegevens gewoon op, en ze worden goed verwerkt zoals ik wil!
In FF gaat het niet goed! Als ik dan op de button klik gebeurd er gewoon niks.
Voor al deze dingen zijn wel oplossingen en work-arounds te vinden, maar over moeilijk doen gesproken...
Oftewel: wat zijn de voordelen van navigatie & laden via Javascript? Ik zie de voordelen nog niet opwegen tegen de nadelen. Webapps als Gmail of een ander desktop-vervangend programma zijn een ander verhaal. Maar hier hoeven ook geen pagina's geladen te worden, alleen data. En in het geval van Koen gebeurt dit niet, want anders zou hij geen Javascript via zijn XMLHTTPRequest hoeven te verwerken...
Maar weer even naar het probleem van de topic-starter: Geeft je Firefox Console ook nog een melding? (onder het menu 'extra')
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
@koen: Ik mis de echte AJAX-functie, waar het ActiveX-object wordt aangemaakt. Zo kan ik niet zien of je wel de juiste data meegeeft aan de server.
@SAIMEN:
de ajax functie zit in prototype ...
Dat is een tool waarmee je ajax kan gebruiken, alleen ga ik die niet posten want die ik 29 kb :p
Dit is de site:
http://prototype.conio.net/
Gewijzigd op 01/01/1970 01:00:00 door Koen B
OK, ja ik zie net ook dat je het over Prototype hebt, my bad! Die AJAX functie zit wel goed dan ;-).
Okee, tijd voor een debug-sessie:
- Zet boven de functie eens een alert() met wat tekst, om te kijken of de functie wel gedeclareerd wordt.
- Zet binnen de functie (1e regel binnen de functie) een alert() om te kijken of hij wordt aangeroepen.
- Zet eentje aan het einde van de functie (net voor } ) om te kijken of hij niet binnen de functie ergens afkapt.
En post je bevindingen hier :)
klik
Inloggen kan met:
naam: kebion
code: kebion
Als je dan op de link 'bank' klikt is er een voorbeeld die zou moeten werken.
Deze werkt dus wel in IE maar niet in FF
:edit:
met deze code:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
alert('1 boven/buiten de functie');
function send(form, div, pagina){
alert('2 boven/in de functie');
var params = Form.serialize($(form));
new Ajax.Updater(div, pagina, {asynchronous:true , evalScripts:true , parameters:params});
alert('3 onder de functie');
}
function send(form, div, pagina){
alert('2 boven/in de functie');
var params = Form.serialize($(form));
new Ajax.Updater(div, pagina, {asynchronous:true , evalScripts:true , parameters:params});
alert('3 onder de functie');
}
Met IE zie ik ze alle 3
Met FF zie ik de eerste niet eens! Ook niet na vernieuwen, of in een nieuw venster openen.
Gebruikt FF een .js file uit de cashe ofzo?
Gewijzigd op 01/01/1970 01:00:00 door Koen B
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
function info() {
window.setTimeout( "info()", 30000);
getHTML('stats.php','info','get');
alert('4 info');
}
window.setTimeout( "info()", 5000);
window.setTimeout( "info()", 30000);
getHTML('stats.php','info','get');
alert('4 info');
}
window.setTimeout( "info()", 5000);
In IE doet dit het ook, in FF doet deze functie het WEL maar hij geeft geen alert...
:edit:
en in error ding van FF staat nog steeds niks dat hiermee te maken heeft ...
Gewijzigd op 01/01/1970 01:00:00 door Koen B