Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jsonp i php
Forum PHP.pl > Forum > XML, AJAX > AJAX
Cinamicom
Witam. Mam taki kodzik:
  1. $.ajax({
  2. type: "POST",
  3. dataType: "jsonp",
  4. url: "http://stachu.pl/login.php",
  5. success: function(response){
  6. alert("ok");
  7. },
  8. error: function(response){
  9. window.location.href = "http://www.stachu.pl/login.php";
  10. }
  11.  
  12. });


A plik login.php jest taki:

  1. $out = array(
  2. 'success' => 'true'
  3. );
  4. $out = json_encode($out);
  5. echo $out;


Niestety to nie działa, cały czas wykonuje się error, czyli header na location.href

Proszę o pomoc.
trueblue
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
W sumie to nic tam nie widzę.
http://screencloud.net/v/FKd
trueblue
Za mało. Kliknij w to żądanie i po prawej sprawdź co jest w zakładce Preview lub Response.
Cinamicom
response
  1. <form action="" method="post">
  2. <input type="text" name="login" value="Login"/><br />
  3. <input type="password" name="password" value="pass"/><br />
  4. <input type="submit" name="submit" value="Zaloguj"/>
  5. </form>{"success":"true"}

preview( nie dalo sie skopiowac)
http://screencloud.net/v/zlWh
trueblue
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
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
A co teraz otrzymujesz w odpowiedzi?
Cinamicom
Masz screena, wy edytowałem odpowiedź wyżej.
trueblue
  1. echo $_GET['callback']."(".$out.")";
Cinamicom
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
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
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
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
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
Na nic nie patrzy ani nie zerka:)

  1. $out = array(
  2. 'status' => 1 jeśli ok, 0 jeśli nie ok
  3. );
  4. $out = json_encode($out);
  5. echo $out;


  1. success: function(response){
  2. if(response.status==1)
  3. zrob coś
  4. else
  5. zrób coś innego
  6. },

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.
Invision Power Board © 2001-2024 Invision Power Services, Inc.