2013-08-16 30 views
28

Próbuję utworzyć proste żądanie AJAX, które zwraca niektóre dane z bazy danych MySQL. Oto moja funkcja poniżej:

function AJAXrequest(url, postedData, callback) { 
    $.ajax() ({ 
     type: 'POST', 
     url: url, 
     data: postedData, 
     dataType: 'json', 
     success: callback 
    }); 
} 

... a tu, gdzie ja to nazywam, analizowania w wymaganych parametrach:

AJAXrequest('voting.ajax.php', imageData, function(data) { 
    console.log("success!"); 
}); 

na stronie voting.ajax.php, obecnie jestem po prostu zwracając JSON zakodowany zmienna równa 1 do testowania:

$someNumber = 1; 
return json_encode($someNumber); 

Jednak mój sukces wywołania zwrotnego nie działa (! „sukcesu”, jak nie jest zalogowany do konsoli) i pojawia się błąd w moim konsoli:

Co to oznacza? Zrobiłem żądania AJAX wcześniej, gdzie zdarzenie sukcesu wyzwala anonimową funkcję wewnątrz $ .ajax, ale teraz próbuję uruchomić oddzielną nazwaną funkcję (w tym przypadku wywołanie zwrotne). Jak mam to zrobić?

+2

czy jQuery jest włączone –

+0

zmienić to $ .ajax() ({do $ .ajax ({ –

+2

Nazwałeś '$ .ajax' bez argumentów ('$ .ajax()'), a wartością zwracaną jest obiekt jqXHR, który nie jest funkcją, dlatego też '$ .ajax() (...)' spowoduje błąd: –

Odpowiedz

20

Nie jestem pewien, ale wygląda na to, że masz kod składniowy w kodzie. Spróbuj:

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: postedData, 
    dataType: 'json', 
    success: callback 
}); 

Miałeś dodatkowe wsporniki do kolejnych $.ajax które nie były potrzebne. Jeśli nadal występuje błąd, plik skryptu jQuery nie jest ładowany.

+1

To nie jest błąd w składni. Zwrócona wartość była po prostu funkcją, której nie ma. –

+0

Ahhh Rozumiem. Naprawdę, ten problem jest naprawdę brakującym plikiem referencyjnym do pliku skryptowego jQuery. –

+2

Nie. Spójrz na to jako '$ .ajax()();'. To jest poprawny JavaScript. To znaczy "zadzwoń" $ .ajax' i cokolwiek zwróci, również to nazwij ". Ale '$ .ajax' nie zwraca funkcji (która mogłaby zostać wywołana), zwraca obiekt' jqXHR', więc generuje błąd. Twoja odpowiedź jest poprawna, dodatkowe "()" są problemem, ale opis problemu nie jest poprawny (nie jest to błąd składni, a przynajmniej nie dla parsera). –

3

Wystąpił błąd składni postawieniu nawias po funkcji Ajax i inny zestaw nawiasie zdefiniować listę argumentów: -

Jak masz napisane: -

$.ajax() ({ 
    type: 'POST', 
    url: url, 
    data: postedData, 
    dataType: 'json', 
    success: callback 
}); 

nawias wokół ajax musi być usunięty powinno być: -

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: postedData, 
    dataType: 'json', 
    success: callback 
}); 
3

masz błąd w funkcji AJAX, za dużo nawiasów, spróbuj zamiast $.ajax({

2

Napotkałem to samo pytanie, a moim rozwiązaniem było: dodać skrypt JQuery.

Szczególnie powinniśmy upewnić się, że odpowiedni JQuery jest załadowany, gdy debugujemy nasze js pod firefox/chrome.

9

kasie Jquery Documentation

Deprecation Notice: The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callbacks are removed as of jQuery 3.0. You can use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

+1

To była dla mnie najbardziej przydatna odpowiedź, ponieważ niedawno przeprowadziłem migrację do jQuery 3. Myślę, że bardzo trudno jest znaleźć to powiadomienie o odstąpieniu, więc dziękuję za wskazanie. – DavidHyogo

+1

To jest dokładnie ten problem, który miałem. Przełączyłem się na najnowszy jquery bez czytania dokumentacji. wstyd, wstydźcie się mnie. – Mike

237

Żadna z odpowiedzi tutaj pomógł mi. Problem polegał na tym, że: Użyłem cienkiej wersji jQuery, która usunęła niektóre elementy, a ajax był jednym z nich.

Rozwiązanie: wystarczy pobrać zwykłą (skompresowaną lub nie) wersję jQuery here i dołączyć ją do projektu.

+13

To właśnie naprawił mój problem! Co do cholery jQuery? Dlaczego '$ .ajax' został usunięty z" wąskiej "wersji? – samnau

+1

Napotkałem to. – ACJ

+10

to powinna być zaakceptowana odpowiedź. –

1

Dla każdego, kto próbuje uruchomić to w nodejs: To nie będzie działać po wyjęciu z pudełka, ponieważ jquery potrzebuje przeglądarki (lub podobnej)! Próbowałem tylko importować i rejestrować console.log($), który napisał [Function], a następnie także console.log($.ajax), który zwrócił undefined.Nie miałem błędów tsc i miałem autouzupełnianie od intellij, więc zastanawiałem się, co się dzieje.

Potem w pewnym momencie zdałem sobie sprawę, że node może być problemem, a nie maszynopisem. Próbowałem tego samego kodu w przeglądarce i działało. Aby to działało trzeba uruchomić:

require("jsdom").env("", function(err, window) { 
    if (err) { 
     console.error(err); 
     return; 
    } 

    var $ = require("jquery")(window); 
}); 

(kredyty: https://stackoverflow.com/a/4129032/3022127)

39

dwukrotnie sprawdzić, czy używasz pełnej wersji jQuery a nie jakiś szczupły wersję.

Użyłem jquery link skryptu cdn, który pochodzi z jquery. Problem polega na tym, że domyślnie jest to slim.jquery.js, który nie ma w sobie funkcji ajax. Tak więc, jeśli używasz (skopiuj wklejony z witryny Bootstrap) cienki link skryptu jQuery, użyj zamiast tego pełnej wersji.

To znaczy Użyj <script src="https://code.jquery.com/jquery-3.1.1.min.js"> zamiast <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"

+0

Dzięki. To był mój szczególny problem - zaoszczędziłem sporo tropienia :-) – RichardAtHome

Powiązane problemy