Hoe kun je zoiets bereiken:
- Je klikt op een icoontje
- Dan krijg je een JS popupje
- Als je op het popupje op OK of Ja klikt wordt een opdracht uitgevoerd
De eerste twee zijn geen probleem, maar ik weet niet hoe je als je het popupje(Alert window) bevestigt een opdracht uitgevoerd word.
Of Ajax (geen pagereload)
Dan gebeurt de opdracht achter de schermen maar je kunt je pagina uiteraard laten wachten op een antwoord voor je iets anders kunt doen.
Of bedoel je hoe je het antwoord moet opvangen?
Dit kan via een confirm venster
Maar misschien ben ik onduidelijk geweest, maar ik begrijp nog altijd niet hoe je dan een opdracht in PHP uitvoerd. bv: Als je Ja klikt voert hij de mysql query uit.
Dit doe je via een javascriptfunctie die ajax gebruikt om een phpbestand aan te spreken. Hieronder vind je normaal alles wat je nodig hebt (ik heb deze functies rap uit stukken van mijn code geschraapt maar op het eerste zicht bevat het alles wat je nodig hebt)
Heb je nog nooit met ajax gewerkt dan raad ik je aan om eens een tutorial te zoeken die uitlegt wat ajax is en wat je ermee kan doen.
Hieronder 2 functies, de eerste is nodig om de HTTPHandler op te bouwen, de 2e functie (executePhpfile) zal de ajax opdracht uitvoeren.
In deze regel:
XMLHTTPObject.open('POST', 'bestand.php', true);
pas je bestand.php aan naar het bestand waarin je de query zet. Ik heb deze functie een post laten doorsturen met 1 parameter(parameterA) omdat je bv kan meegeven welke query er moet uitgevoerd worden, er kunnen natuurlijk oneindig veel parameters meegegeven worden. Die moet je op de laatste regel
XMLHTTPObject.send('parametera=' + parameterA + '');
concatineren zoals je een GET string zou maken(wat is de juiste benaming weer?).
Mijn uitleg is zeer kort en hierdoor leer je niets bij ik weet het, maar om alles van ajax uit te leggen bestaan er zeer goeie tutorials.
function createHTTPHandler(){
httphandler = false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
httphandler = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
httphandler = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
httphandler = false;
}
}
@end @*/
if (!httphandler && typeof XMLHttpRequest!='undefined') {
httphandler = new XMLHttpRequest();
}
return httphandler;
}
function executePhpfile(parameterA){
var XMLHTTPObject = createHTTPHandler();
XMLHTTPObject.open('POST', 'bestand.php', true);//pas hier bestand.php aan naar je eigen phpbestand met query
XMLHTTPObject.onreadystatechange=function() {
if (XMLHTTPObject.readyState==4) {
var resultaat = XMLHTTPObject.responseText;
//dit is wat de php pagina parst, je kunt je pagina bv een true laten parsen bij succes en dit gebruiken om de gebruiker een bericht te tonen als het de bewerking gelukt is of niet.
}
}
XMLHTTPObject.setRequestHeader("Cache-Control", "no-cache");
XMLHTTPObject.setRequestHeader("X_USERAGENT", "MijnAjaxApplicatie");
//Post:
XMLHTTPObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
XMLHTTPObject.setRequestHeader('Connection', 'close');
XMLHTTPObject.send('parametera=' + parameterA + ''); //hier kun je de parameters via post doorsturen, concatineren gebeurt zoals in een get string met de &
}
function createHTTPHandler(){
httphandler =false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
httphandler = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
httphandler = new ActiveXObject("Microsoft.XMLHTTP");
XMLHTTPObject.open('POST','bestand.php',true);//pas hier bestand.php aan naar je eigen phpbestand met query
XMLHTTPObject.onreadystatechange=function(){
if(XMLHTTPObject.readyState==4){
var resultaat = XMLHTTPObject.responseText;
//dit is wat de php pagina parst, je kunt je pagina bv een true laten parsen bij succes en dit gebruiken om de gebruiker een bericht te tonen als het de bewerking gelukt is of niet.
XMLHTTPObject.send('parametera='+ parameterA +'');//hier kun je de parameters via post doorsturen, concatineren gebeurt zoals in een get string met de &
stukje javascript voorbeeld om een ajax actie uit te voeren, dit gedeelte bevat zowel ajax request als response en error zetting.
Dit geld enkel om je de werking aan te tonen. opgelet: ik gebruik nog wel een eigen extensie op het framework zowel javascript als php. Waar SN voorstaat is van eigen framework
<?php
public function removeDeliveryAction() {
// Check if ajaxrequest
$this->isXmlHttpRequest();
// Disable view renderer
$this->_helper->viewRenderer->setNoRender();
// Init
$LdefaultErrMsg_string = 'Er is een fout opgetreden bij het permenent verwijderen van de levering.';
$LdeliveryID_guid = $this->getRequest()->getQuery('id');
$LficheID_guid = $this->getRequest()->getQuery('fid');
// Get record
require_once('Deliveries.php');
$LdeliveryTable_obj = new Deliveries();
$LdeliveryDataRow_obj = $LdeliveryTable_obj->fetchRow("id = '$LdeliveryID_guid'");
// Redirect if not exists
if (!$LdeliveryDataRow_obj) {
$this->notFound($LdeliveryID_guid, array('record' => 'Levering', 'object' => 'Delivery'));
}
// Set ajax data
$this->setAjaxData('id', $LficheID_guid);
$this->setAjaxData('pid', $LdeliveryDataRow_obj->product_id);
// Archive
if ($LdeliveryDataRow_obj->delete(true)) {
$this->setAjaxResult(self::RES_OK);
$this->setResult('custom', 'Levering ' . $LdeliveryDataRow_obj->toString() . ' werd permanent verwijderd.');
} else {
$this->setAjaxResult(self::RES_ERROR, self::RES_TYPE_PROCESSERROR, $LdefaultErrMsg_string . '<br/> could not be removed.');
}
// Set the Response for the user testing this or for the AJAX handler on the client.
$this->getResponse()->setHeader('Content-Type', 'text/plain');
$this->getResponse()->setBody($this->getAjaxResponse());
}
?>
<?php
publicfunction removeDeliveryAction(){
// Check if ajaxrequest
$this->isXmlHttpRequest();
// Disable view renderer
$this->_helper->viewRenderer->setNoRender();
// Init
$LdefaultErrMsg_string='Er is een fout opgetreden bij het permenent verwijderen van de levering.';