Mam formularz rejestracyjny i używam go, $.ajax
aby go przesłać.
To jest moja prośba AJAX:
$(document).ready(function() {
$("form#regist").submit(function() {
var str = $("#regist").serialize();
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
}
});
return false;
});
});
W moim pliku Submit1.php sprawdzam, czy pola zawierają adres e-mail i nazwę użytkownika w bazie danych . Chcę wyświetlić komunikat o błędzie, jeśli te wartości istnieją bez odświeżenia strony .
Jak mogę dodać to do powodzenia wywołania zwrotnego mojego żądania AJAX?
javascript
jquery
ajax
codingbbq
źródło
źródło
Odpowiedzi:
Wynik prawdopodobnie nie jest w formacie JSON, więc gdy jQuery spróbuje go parsować jako taki, nie powiedzie się. Możesz złapać błąd dzięki
error:
funkcji zwrotnej.Wydaje się, że i tak nie potrzebujesz JSON w tej funkcji, więc możesz także wyjąć
dataType: 'json'
wiersz.źródło
dataType:'text'
dataType:
nie określono, aleurl:
kończy się na.json
.$.post
aliasu dostarczanegojson
jako typ danych bez rzeczywistegosuccess
Chociaż problem został już rozwiązany, dodaję to w nadziei, że pomoże innym.
Popełniłem błąd i próbowałem użyć funkcji bezpośrednio takiej jak ta (sukces: OnSuccess (productID)). Ale najpierw musisz przekazać anonimową funkcję:
Jeśli nie używasz funkcji anonimowej jako opakowania, wywoływany jest OnSuccess, nawet jeśli usługa internetowa zwraca wyjątek.
źródło
Próbowałem usunąć wiersz dataType i nie działało to dla mnie. Rozwiązałem ten problem, używając „zakończenia” zamiast „sukcesu” jako oddzwaniania. Wywołanie zwrotne sukcesu nadal kończy się niepowodzeniem w IE, ale ponieważ mój skrypt działa i kończy się, to wszystko, co mnie obchodzi.
W jQuery 1.5 możesz to zrobić w ten sposób.
źródło
complete
będzie zawsze wywoływany bez względu na to, czy wywołanie ajax zakończyło się powodzeniem, czy nie, asuccess
wywoływany jest tylko wtedy, gdy serwer WWW odpowiada200 OK
nagłówkiem HTTP (wszystko jest w porządku).Upewnij się, że nie drukujesz (echo ani nie drukujesz) żadnego tekstu / danych przed wygenerowaniem danych sformatowanych w JSON w pliku PHP. To może wyjaśniać, że otrzymujesz -udane 200 OK, ale twoje sukcesy nadal zawodzą w javascript. Możesz sprawdzić, co otrzymuje skrypt, zaznaczając sekcję „Sieć - odpowiedź” w firebug dla POST subm1.php.
źródło
Umieść
alert()
w swoimsuccess
zwrotnego aby upewnić się, że miano w ogóle.Jeśli tak nie jest, to po prostu dlatego, że żądanie w ogóle się nie powiodło, nawet jeśli udało ci się trafić na serwer. Uzasadnionymi przyczynami może być upływ czasu lub coś w twoim kodzie php zgłasza wyjątek.
Zainstaluj dodatek firebug dla Firefoksa, jeśli jeszcze tego nie zrobiłeś i sprawdź wywołanie zwrotne AJAX. Będziesz mógł zobaczyć odpowiedź i informację, czy otrzyma odpowiedź (200 OK). Możesz także umieścić inny
alert()
wcomplete
wywołaniu zwrotnym, który zdecydowanie należy wywołać.źródło
success
, to nie jest to sukces. ponieważ odpowiedź wynosi 200 OK, odpowiedź Tatu wydaje się rozsądna, ale w celu dalszego rozwiązywania problemów można użyć innego zdarzenia, wywoływanego,complete
które jest zawsze wywoływane, niezależnie od tego, czy żądanie zakończy się powodzeniem (success
tylko wtedy, gdy żądanie się powiedzie).complete: function (xhr, status) { alert('complete: '+status); }
Miałem ten sam problem. dzieje się tak, ponieważ
javascript
oczekujjson
typu danych w zwracanych danych. ale jeśli używasz echa lub drukowania w swoim php, taka sytuacja ma miejsce. jeśli używaszecho
funkcji inphp
do zwracania danych, po prostu usuńdataType : "json"
działający całkiem dobrze.źródło
Zwracałem prawidłowy JSON, otrzymałem odpowiedź 200 w moim „pełnym” wywołaniu zwrotnym i mogłem zobaczyć to w chromowanej konsoli sieci ... ALE nie określiłem
kiedyś to zrobiłem, w przeciwieństwie do „zaakceptowanej odpowiedzi”, która faktycznie rozwiązała problem.
źródło
Używam XML, aby przenieść wynik z php na serwerze na stronę internetową i miałem takie samo zachowanie.
W moim przypadku przyczyną było to, że tag zamykający nie pasował do tagu otwierającego.
źródło
Miałem ten problem przy użyciu funkcji ajax do odzyskania hasła użytkownika z Magento. Zdarzenie sukcesu nie zostało uruchomione, a potem zdałem sobie sprawę, że wystąpiły dwa błędy:
Dlatego za każdym razem, gdy próbowałem użyć json_eoncde () do kodowania zwracanej tablicy, funkcja nie działała, ponieważ jeden z jej indeksów zawierał znaki inne niż utf, z których większość zaakcentowała brazylijskie portugalskie słowa.
źródło
Próbowałem zwrócić ciąg z kontrolera, ale dlaczego kontrola powraca do bloku błędów nie powiodła się w ajax
źródło
Napotkałem ten sam problem podczas odpytywania kontrolera, który nie zwraca odpowiedzi powodzenia, gdy zmodyfikowałem mój kontroler, aby zwrócił komunikat o powodzeniu problemu. Uwaga przy użyciu ramy Lavalite. przed:
to zadziałało dla mnie
źródło
Miałem ten sam problem, który rozwiązałem w ten sposób: Mój ajax:
Dobrze. Problem nie dotyczy json, ale tylko odpowiedzi php. Przed: moja odpowiedź php brzmiała:
Teraz:
Teraz mój sukces działa. PS. Przepraszam, jeśli coś jest nie tak, ale to mój pierwszy komentarz na tym forum :)
źródło
w moim przypadku błąd był po stronie serwera iz tego powodu zwracał HTML
źródło
Dodaj wywołanie zwrotne „błąd” (podobnie jak „sukces”) w ten sposób:
Tak więc w moim przypadku widziałem w konsoli:
źródło
Musisz zadeklarować zarówno połączenie zwrotne powodzenia, jak i błędu. Dodawanie
powinien rozwiązać problem
źródło
Sukces zwrotna przyjmuje dwa argumenty:
Upewnij się również, że
submit1.php
ustawia odpowiedni nagłówek typu zawartości:application/json
źródło
success
przyjmuje się dwa argumenty, wydaje się zupełnie nieistotny dla pytania. Możesz przekazać dowolną liczbę parametrów do funkcji javascript, niezależnie od tego, ile akceptuje w deklaracji, więc zdecydowanie nie jest to przyczyną tych problemów, a ponieważ żadna z wartościdata
lubtextStatus
nie jest używana w wywołaniu zwrotnym sukcesu, wydaje się, że nie ma żadnego powodu, aby w ogóle deklarować je w funkcji.