Cinamicom
29.03.2014, 11:18:17
Witam. Mam taki kodzik:
$.ajax({
type: "POST",
dataType: "jsonp",
url: "http://stachu.pl/login.php",
success: function(response){
alert("ok");
},
error: function(response){
window.location.href = "http://www.stachu.pl/login.php";
}
});
A plik login.php jest taki:
'success' => 'true'
);
$out = json_encode($out);
Niestety to nie działa, cały czas wykonuje się error, czyli header na location.href
Proszę o pomoc.
trueblue
29.03.2014, 11:20:47
Zobacz z jakiej domeny uruchamiasz skrypt, a do jakiej wysyłasz żądanie Ajax.
EDIT: No tak, to JSONP. Podejrzyj narzędziem developerskim jaki jest status odpowiedzi i co zwraca żądanie.
Cinamicom
29.03.2014, 14:29:55
W sumie to nic tam nie widzę.
http://screencloud.net/v/FKd
trueblue
29.03.2014, 14:32:58
Za mało. Kliknij w to żądanie i po prawej sprawdź co jest w zakładce Preview lub Response.
Cinamicom
29.03.2014, 14:41:08
response
<form action="" method="post">
<input type="text" name="login" value="Login"/><br />
<input type="password" name="password" value="pass"/><br />
<input type="submit" name="submit" value="Zaloguj"/>
</form>{"success":"true"}
preview( nie dalo sie skopiowac)
http://screencloud.net/v/zlWh
trueblue
29.03.2014, 14:51:16
No, to jak sam widzisz masz błąd.
Skrypt powinien zwracać JSON, a zwraca doklejony do niego HTML.
W żądaniu Ajax prześlij dodatkową zmienną i w skrypcie sprawdź czy jest, jeśli jest, to drukuj tylko odpowiedź bez formularza, albo jeśli do skryptu nie idą inne zapytanie przez $_POST, to sprawdź $_SERVER['REQUEST_METHOD']=='POST' i zrób warunek jak wyżej.
Cinamicom
29.03.2014, 15:02:54
Usunalem html i tez nie dziala. Wyslana zmienna o wartosci "1" wyswietlilo bez problemu.
Edit
Dodałem ifa z get callback na formularz i odpowiedź.
Screen już bez wyświetlania wysłanej zmiennej przez Ajaxa.
http://screencloud.net/v/txU
trueblue
29.03.2014, 15:11:17
A co teraz otrzymujesz w odpowiedzi?
Cinamicom
29.03.2014, 15:15:17
Masz screena, wy edytowałem odpowiedź wyżej.
trueblue
29.03.2014, 15:28:43
echo $_GET['callback']."(".$out.")";
Cinamicom
29.03.2014, 15:43:03
Bingo! Dziękuje Ci bardzo. Masz plusiki.
Ale jeszcze jest jeden problem. Nie zalezenie czy dam true czy false. Ajax odbiera mi zawsze jako success.. Jak wejdę w ten podgląd, to zwraca mi "error" true
chociaż wykonało mi jako success.
trueblue
29.03.2014, 16:06:34
Funkcja success jest wykonywana wtedy kiedy otrzymano odpowiedź od serwera, niezależnie od zawartej treści.
W samej funkcji musisz już sprawdzać jaką odpowiedź otrzymałeś i w zależności od tego przekierowywać na login.php lub nie.
Cinamicom
29.03.2014, 16:11:24
Ale w skrypcie mam if.
if jest ciastko
succes = true
else
error true
I jak ja mam to w funkcji sprawdzic, skoro ify nie dzialaja, bedę miał i to i to.
trueblue
29.03.2014, 16:17:13
Mylisz pojęcia.
Treścią odpowiedzi, którą generujesz w PHP nie decydujesz czy się uruchomi funkcja success czy error.
W success musisz wprowadzić if w zależności co otrzymasz w obiekcie response.
Cinamicom
29.03.2014, 16:22:53
Czyli to nie patrzy na moje ify i php.
Czyli zwraca mi error bo jest ostatni. I jak ja mam to sprawdzić co otrzymam? - otrzymam error bo na php nie patrzy.
Ale można zrobić inaczej, zwrócić ciastko, i w js sprawdzić czy jest puste?
trueblue
29.03.2014, 16:28:24
Na nic nie patrzy ani nie zerka:)
'status' => 1 jeśli ok, 0 jeśli nie ok
);
$out = json_encode($out);
success: function(response){
if(response.status==1)
zrob coś
else
zrób coś innego
},
Oczywiście możesz zmienić "status" na inną nazwę, chciałem wskazać, że nie ma to powiązania z funkcją w Ajaxie.
Możesz też zmienić odpowiedzi 1 i 0.
W obydwu przypadkach musisz zmienić po stronie PHP i JS.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.