2017-04-30 3 views
0

ich einen Ajax-Aufruf habe, die wie folgt aussieht:Aktualisieren der aktuelle Seite am Ende der PHP Ajax nennt

$.ajax({ 
    type: "POST", 
    url: "myPHP.php", 
    data: 1, 
    success: window.location.reload() 
}); 

Und einige PHP, um es im Zusammenhang:

<?php 

// PDO CONNECTION 

session_start(); 

$mission_id = $_POST['mission']; 

$_SESSION['auth']->mission_id = $mission_id; 

if($pdo->prepare('UPDATE client SET mission_id = ? WHERE id = 1;')->execute([$mission_id])) { 
    // Creates a session to be read by the header at the page load 
    $_SESSION['flash']['success'] = 'Good.'; 
} else { 
    $_SESSION['flash']['danger'] = 'Problem.'; 
} 

?> 

In meinem Kopf. php (das ich auf jeder Seite einschließe), habe ich einen Code, der die Sitzung ['flash'] liest, die zugehörige Nachricht anzeigen, und dann zerstören. Auf meiner Seite habe ich eine PHP-Bedingung, die nach der Sitzung ['auth'] -> mission_id sucht und den Inhalt entsprechend anzeigt.

Ich bin bereit, die Seite zu aktualisieren, sobald der PHP-Code vollständig abgeschlossen ist, damit der Sitzungsblitz angezeigt wird und die Bedingungen der Sitzung mission_id berücksichtigt werden.

Das Problem ist, dass, wenn ich meinen Ajax-Code ausführen, die Seite neu geladen wird, aber wie wenn die PHP-Sitzung (flash und mission_id) nicht bereit wäre. Ich muss manuell neu laden, um die Änderungen zu sehen.

Ich versuchte Lösungen mit vollständigen anstelle von Erfolg und sogar setTimeout, aber es hat nicht funktioniert.

Ich weiß, dass das PHP funktioniert, weil ich die Änderung in meiner Datenbank sehen kann, die durch das PHP vorkommt.

Ich habe versucht:

$.ajax({ 
    type: "POST", 
    url: "myPHP.php", 
    data: myDatas, 
    success: setTimeout(window.location.reload(), 3000) 
}); 

Und einige andere Sachen.

Vielen Dank für Ihre Hilfe.

Antwort

2

In beiden ...

success: window.location.reload() 
success: setTimeout(window.location.reload(), 3000) 

... die Klammer nach reload werden sofort die Methode aufrufen. Was entweder vorgesehen ist success: oder setTimeout() die return Wert ist Methode, ähnlich wie:

var _result = window.location.reload(); 

$.ajax({ 
    type: "POST", 
    url: "myPHP.php", 
    data: 1, 
    success: _result 
}); 

den Anruf bis zum Zeitpunkt des Ereignisses zu verzögern, werden Sie direkt ein Funktionsobjekt zur Verfügung stellen müssen. Eine Möglichkeit, dies mit Methoden wie reload() zu tun, besteht darin, ihren Anruf in eine andere Funktion zu verpacken.

success: function() { 
    window.location.reload(); 
} 

Oder:

function onSuccess() { 
    window.location.reload(); 
} 

// ... 
success: onSuccess // no calling parenthesis 

In einigen Fällen bietet das Verfahren direkt auch arbeiten kann.

success: window.location.reload 

Obwohl, so tun wird oft die Bedeutung von this für das Verfahren ändern und kann es vorher gebunden sein müssen.

success: window.location.reload.bind(window.location) 
+0

Der folgende Code wurde nicht ordnungsgemäß angewendet und zeigte die Warnung sofort an. \t Cephou

+0

@Cephou [Wie kann ich übergeben Sie einen Parameter auf einen setTimeout() Rückruf?] (Https://stackoverflow.com/questions/1190642/how-can-i-pass-a-parameter-to-a -settimeout-callback) - Um ein Argument zur Verfügung zu stellen, benötigen Sie eine Wrapping-Funktion, die 'setTimeout()' aufruft. 'success: function() {setTimeout (function() {alert (" test ");}, 10000)}' –

+0

Danke! Es klappt :) – Cephou

1
$.ajax({ 
    type: "POST", 
    url: "myPHP.php", 
    data: myDatas, 
    success: function() { 
     setTimeout(window.location.reload(), 3000) 
    } 
}); 

oder

$.ajax({ 
    type: "POST", 
    url: "myPHP.php", 
    data: myDatas, 
    success: function() { 
     window.location.reload() 
    } 
}); 
0

Daten: mydatas! Mydatas sind die Daten, die Sie an das PHP-Skript senden. So können Sie Ihren Variablennamen und Daten wie folgt eingeben:

var name=document.getElementById('name').value; 
data:"name="+name+"age="+age