redirect in page called by ajax
Ik heb een klein testje gemaakt maar er zit ergens iets fout.
Ik heb een pagina met een knop.
Als ik op de knop klik dan wordt via ajax een pagina opgeroepen:
code:
function proceed_task(aantal) {
var url='message.php?begin='+aantal;
var urls_taken = Array(url);
$.ajax({
type: "GET",
url: urls_taken[0],
dataType: "json",
success: task_response
});
}
De pagina message.php wordt opgeroepen maar de redirect in de pagina werkt niet.
de redirect gebeurt nu via een javascript.
message.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
function startsWith($string, $char)
{
$length = strlen($char);
return (substr($string, 0, $length) === $char);
}
function getparameter($parameters,$value)
{
$out='';
for($i=0;$i<count($parameters);$i=$i+1)
{
if(startsWith($parameters[$i],$value))
{
$out=$parameters[$i];
}
}
return $out;
}
$parameters =$_SERVER['QUERY_STRING'];
if ($parameters!='')
{
$parameters=explode('&',$parameters);
$begin=getparameter($parameters,'begin');
if ($begin=='')
{
$start=5;
}
else
{
$begin=explode('=',$begin);
$start=$begin[1];
}
$myFile = "testFile.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
fwrite($fh, $start);
fclose($fh);
$start=(int)$start-1;
if ((int)$start>0)
{
?>
function startsWith($string, $char)
{
$length = strlen($char);
return (substr($string, 0, $length) === $char);
}
function getparameter($parameters,$value)
{
$out='';
for($i=0;$i<count($parameters);$i=$i+1)
{
if(startsWith($parameters[$i],$value))
{
$out=$parameters[$i];
}
}
return $out;
}
$parameters =$_SERVER['QUERY_STRING'];
if ($parameters!='')
{
$parameters=explode('&',$parameters);
$begin=getparameter($parameters,'begin');
if ($begin=='')
{
$start=5;
}
else
{
$begin=explode('=',$begin);
$start=$begin[1];
}
$myFile = "testFile.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
fwrite($fh, $start);
fclose($fh);
$start=(int)$start-1;
if ((int)$start>0)
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//NL" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<link rel="shortcut icon" type="image/gif" href="favicon.gif"/>
<meta http-equiv=content-type content="text/html; charset=UTF-8">
<title> Ajax - Taken in verschillende stappen </title>
<link rel="stylesheet" type="text/css" href="style.css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
function proceed_task(tijdspan) {
var url='message.php?begin='+tijdspan;
var urls_taken = Array(url);
$.ajax({
type: "GET",
url: urls_taken[0],
dataType: "json",
success: task_response
});
}
function task_response (data) {
}
<script>
function do_redirect( url )
{
window.location = url;
}
</script>
Code (php)
1
2
3
2
3
<?php
echo '<script type="text/javascript">do_redirect("message.php?begin='.$start.'");</script>';
?>
echo '<script type="text/javascript">do_redirect("message.php?begin='.$start.'");</script>';
?>
</head>
<body>
</body>
</html>
Kan iemand mij helpen de redirect in orde te krijgen aub?
Ofwel via nog een ajax call als dat gaat een ajax call in een pagina die al via ajax is gecalled
De taak van message.php is om een json string te printen.
message.php is geen html pagina, bevat geen javascript, geen <body> , ...
Dus enerzijds heb je je pagina waar je je knop hebt, je javascript, je php functies, ... Bv. index.php.
Anderzijds, zou message.php er bv. zo kunnen uit zien:
message.php
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Merk op: zorg er voor dat er geen enkele spatie staat buiten de php-haakjes.
Dit object $result ontvang je dan in de javascrip functie task_response.
data zal in dit geval dus een javascript vertaling zijn van de php array $result.
Op dit moment kan javascript het over nemen.
bv.
Ajax heeft me al geholpen om dingen op de achtergrond te laten lopen (door geen antwoord terug te geven hoef ik er niet op te wachten en kan ik de pagina sluiten en doet de taak verder op de achtergrond) nu mis ik enkel nog iets zoals een soort scheduling van een taak en dit alles moet op de achtergrond lopen (pagina kan gesloten worden en alles loopt gewoon verder).
Om op je voorbeeld verder te gaan.
Stel je hebt een registratie en 2 uur later wil je nakijken of hij zijn registratie al bevestigd heeft en zo niet stuur de taak een herinneringsmail.
Maar op de webhosting zijn beperkingen en men wil niet van hosting veranderen.
Op de servers staat safe mode op off, en staat open basedir op on.
De mappen die toegestaan zijn:
/customers/uwdomein.nl/uwdomein.nl, /usr/share/php
De volgende PHP functies zijn uitgeschakeld: disk_total_space, diskfreespace, exec, system, popen, proc_open, proc_nice, shell_exec, passthru, dl, set_time_limit en de 5e parameter in mail().
cron is ook niet mogelijk.
Ik had gedacht aan redirecting op de achtergrond. Zo kan de pagina slapen op de achtergrond en na 25 minuten (5 minuten voor time out) redirecten zodat de time out gereset wordt en terug slapen tot de 2 uur gepasseerd is en dan de taak uitvoeren.
Nadeel is je kan maar X aantal keer achter elkaar header:location doen of is dat enkel lokaal?
Of had ook nog aan gedacht aan een lus met oproepen van ajax functies zodat ik alles op de achtergrond loopt.
Lukt mijn vraag op één of andere manier? via php en javascripting of iets anders?
Gewijzigd op 20/12/2010 22:37:10 door Da Ver
Drupal heeft toch modules die gescheduled kunnen worden of ben ik verkeerd?
Als het klopt wat ik zeg moet het toch mogelijk zijn om te doen wat ik zou willen doen. Weet er iemand hoe de code van drupal dit(mail verzenden na 2 uur bijvoorbeeld) mogelijk maakt? Heb al in de modules van drupal zitten zoeken maar aangezien mijn kennis van php nog niet te ver reikt geraak ik er niet echt aan uit. Kan iemand me hierbij helpen hoe drupal een mail bijvoorbeeld laat verzenden na 2 uur?