redirect in page called by ajax

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Da Ver

Da Ver

17/12/2010 23:26:19
Quote Anchor link
Ik hab al wat zitten zoeken op google maar kom er niet echt uit.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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)
{

?>

<!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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<script type="text/javascript">do_redirect("message.php?begin='.$start.'");</script>';
?>


</head>
<body>
</body>
</html>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
            }
}

?>



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
 
PHP hulp

PHP hulp

27/11/2024 09:59:06
 
Kris Peeters

Kris Peeters

20/12/2010 18:22:08
Quote Anchor link
Nee, dit is niet de bedoeling.

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
  // gewoon als test.  Deze gegevens zouden komen van een db, van een POST, ...
  $result = array(
    'id' => 5,
    'username' => 'John' ,
    'message' => 'Registratie geslaagd, ...',
    'redirect' => 'edit_user.php?'
  );
  echo json_encode($result);  // GEEN <body>, geen javascript, ...  enkel dit echo'en
?>


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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
function task_response (data) {
  window.location = data.redirect;
}
 
Da Ver

Da Ver

20/12/2010 20:34:37
Quote Anchor link
En die window.location gaat dat ook nog op de achtergrond lopen?

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
 
Da Ver

Da Ver

22/12/2010 10:45:57
Quote Anchor link
Drupal kan je wel op de hosting installeren waar de website staat. (de website volledig bouwen in drupal is niet echt een optie)
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?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.