Ik heb een javascript dat een submit van een form uitvoert .
Die submit start een phph script dat een plaatje accepteert, er een thumbnail van maakt en opslaat.
De thumbnail wordt vervolgens op de pagina geplaatst. Dat gebeurt dus met ajaxform en de meegegeven target.
Zie hier:
Maar nu wil ik het plaatje op twee plaatsen hebben. Kan ik twee targets meegeven? Ik heb me in allerlei bochten gewrongen, maar na twee dagen weet ik niets meer te bedenken.
Wat retourneert het PHP script?
En kun je datgene wat moet gebeuren niet afhandelen in de callback-functie van je ajaxForm()?
Dus zoiets:
- verstuur info naar PHP-script via AJAX-form
- PHP script doet zijn ding en stuurt de benodigde informatie terug...
- ... die wordt opgevangen door de callback-functie, waarmee je verder je visuele zaken op je scherm regelt?
De bedoeling is dat er dan ook een kruis bij wordt geplaatst om het plaatje weer te kunnen verwijderen. (zoals marktplaats dat ook doet). Dat kruis zet ik er in de jsquery als volgt onder:
Maar het kan voorkomen dat er geen afbeelding of een verkeerd bestandsformaat wordt opgegeven. Dat wordt in het php script opgemerkt en afgevangen. Waar ik naar zoek is dat in dat geval er géén kruis wordt geplaatst. Die voorwaardelijke plaatsing kan ik maar niet in het php script krijgen.
Ik zoek dus eigenlijk naar wat jij voorstelt. De callback functie. Maar dat gaat (nog) boven mijn pet. Misschien weet jij hoe ik dat met die functie kan afhandelen binnen het js-script?
Je kan de callback functie op dezelfde manier declareren als met JQuery's $.ajax() methode.
Dus:
[code lang="js"]
$("#imageforme").ajaxForm({
success: function(r) {
// hier je afhandeling
}
});
[/code]
Thx Ger, Ik heb vandaag gegoogled op de call back functie. Zag deze oplossing langskomen, maar waar ik niet de vinger achter krijg is hoe ik uit de php functie waarden teruggeef aan de call back functie zodat ik voorwaardelijk acties kan uitvoeren. Ik hoop dat ik duidelijk kan maken waar mijn probleem ligt. Ik weet hier nét te weinig van. Helaas.
<?php
// misschien hier ook een header voor Content-Type
echo json_encode(array(
'error' => false,
'moreData' => ...
));
?>
Deze output zit als parameter in je (wordt na afloop teruggestuurd naar je) callback-functie:
success: function(data) { ... }
Vervolgens kun je daar de draad weer oppakken, de callback-functie wordt uitgevoerd als deze het resultaat van de POST-operatie terug heeft ontvangen:
$("#imageforme").ajaxForm({
// misschien hier ook ergens een vermelding welke formaat de callback functie terugverwacht (json)
success: function(r) {
if (r.error) { // de boolean uit je PHP array
// foutafhandeling
} else {
// verdere verwerking van r.moreData
}
}
});
In javascript:
[code lang="js"]
("#imageforme").ajaxForm({
dataType: 'json',
success: function(r) {
// r is de response die van php terugkrijgt
// als je json voor dataType gebruikt wordt
// dit automatisch omgezet naar een object
if (r.success) {
$(#content).html(r.content);
$(#othercontent).html(r.othercontent);
}
}
});
[/code]
Voorlopig lukt het me nog niet. Ik heb ontdekt dat de php functie alleen wordt uitgevoerd als ik de regel waarin de json_encode array geëchood wordt tussen aanhalingstekens zet. Dat is wel vreemd omdat alle voorbeelden die ik vind, inclusief die van jullie niet (!) tussen haakjes zet.
Verder heb ik heb voor de zekerheid een vermelding van het formaat van de callback functie toegevoegd. Die header staat helemaal bovenin de php functie om te voorkomen dat er een output plaats vindt vóór de header.
Ik kom in het script in de true voorwaarde. Nu nog de meegegeven waarden uitlezen. Dat moet het pad aanr en de naam van de afbeelding worden.......
[size=xsmall]Toevoeging op 16/02/2015 23:55:58:[/size]
Ik heb 'm inmidddels helemaal werkend. Het voorbeeld van Ger (php code) mist een haakje op het eind.
De callback werkt alleen niet als ik ipv test1 een variabele ingeef met pad/naam van de afbeelding.
Weet iemand hoe je dat doet. Ik heb nu dit staan