TypeError: $ .ajax (…) bir işlev değil mi?


233

MySQL veritabanından bazı veriler döndüren basit bir AJAX isteği oluşturmaya çalışıyorum. İşte benim işlevi aşağıda:

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

... ve burada gerekli parametreleri ayrıştırarak çağırıyorum:

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

Yine de, başarı geri aramam çalışmıyor ("başarılı!" Konsola kaydedilmediğinden) ve konsolumda bir hata alıyorum:

TypeError: $.ajax(...) is not a function.
success: callback

Ne anlama geliyor? Daha önce başarı olay $ .ajax içinde anonim bir işlevi tetikler önce AJAX isteklerini yaptım, ama şimdi ayrı bir adlandırılmış işlevi (bu durumda, bir geri arama) çalıştırmak çalışıyorum. Bunu nasıl yapabilirim?


2
jquery dahil olup olmadığını
Arun P Johny

2
bunu $ .ajax () ({$ .ajax olarak değiştirin) ({
Prabhu Murthy

3
Arguments $.ajax( $.ajax()) olmadan çağırdınız ve döndürülen değer, bir işlev olmayan bir jqXHR nesnesidir. Dolayısıyla $.ajax()(...)bir hata verir.
Felix Kling

2
jquery.js'yi eklemeyi kaçırdınız VEYA işlev çağrısının altına jquery.js'yi eklediniz VEYA lütfen jQuery.ajax'ı deneyin ($ yerine jQuery yazın).
Pranay Bhardwaj

90
Benim durumumda, çünkü ajax işlevini alan JQuery'nin ince minimize edilmiş sürümünü kullandım
TomNg

Yanıtlar:


959

Buradaki cevapların hiçbiri bana yardımcı olmadı. Sorun şuydu: Bazı şeyleri kaldıran jQuery'nin ince yapısını kullanıyordum , ajax bunlardan biri oldu.

Çözüm: Sadece jQuery (sıkıştırılmış veya değil) düzenli sürümünü indirmek burada ve sizin projenize dahil.


56
Bu benim sorunumu çözdü! Ne halt jQuery ?? Neden $.ajax"ince" yapıdan kaldırıldı?
samnau

57
İnce yapı başka bir kurban olduğunu iddia etti.
Drew Kennedy

49
Kodu Bootstrap'tan kopyaladım. İnce versiyonu kullanıyorlar. Belki sende?
Cyril N.

127

Jquery'nin tam sürümünü kullanıp kullanmadığınızı iki kez kontrol edin.

Jquery ile gelen jquery cdn-script bağlantısını kullanıyordum. Sorun bu varsayılan olarak ajaxiçinde işlev olmayan slim.jquery.js olmasıdır. Yani, (Bootstrap web sitesinden kopyalanmış) ince sürüm jquery komut dosyası bağlantısı kullanıyorsanız, bunun yerine tam sürümü kullanın.

Yani kullanmak <script src="https://code.jquery.com/jquery-3.1.1.min.js"> yerine <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"


27

Emin değilsiniz, ancak kodunuzda bir sözdizimi hatası var gibi görünüyor. Deneyin:

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

Yanınızda $.ajaxgerekli olmayan ekstra parantez vardı. Hatayı hala alıyorsanız, jQuery komut dosyası yüklenmez.


2
Bu bir sözdizimi hatası değil. Dönüş değerinin sadece olmayan bir işlev olması bekleniyordu.
Felix Kling

Haaa anladım. Yani gerçekten, bu sorun sadece eksik bir jQuery komut dosyası referansı gerçekten.
Jason Evans

3
Hayır. Şuna bak $.ajax()();. Bu geçerli bir JavaScript. "Ara $.ajaxve ne olursa olsun, onu da ara" demek . Ancak $.ajaxbir işlev döndürmez (çağrılabilir), bir jqXHRnesne döndürür , bu nedenle bir hata atar. Cevabınız doğru, ek ()sorun var, ancak sorunun açıklaması doğru değil (bir sözdizimi hatası değil, en azından ayrıştırıcı için değil).
Felix Kling

Hayır, özür dilerim, önceki yorumumda bunu söylüyordum; sözdizimi geçerli olduğundan, sözdizimi hatası sorunu olmadığını, bunun yerine $ .ajax () kullanılmadığı sırada jQuery komut dosyasıyla ilgili bir sorun olduğunu unutmayın.
Jason Evans

2
Hayır, jquery.js eksik değil (eğer hata ile ilgili olurdu $) ama geçerli bir JS olması sözdizimi hatası değildir. İstenen davranış için uygun bir sözdizimi değildir, bu nedenle Felix tarafından açıklandığı gibi bir çalışma zamanı hatasına neden olur.
nnnnnn

8

Ödeme Jquery Belgeleri

Kullanımdan Kaldırılma Bildirimi : jQXHR.success (), jqXHR.error () ve jqXHR.complete () geri çağrıları, jQuery 3.0'dan kaldırılır. Bunun yerine jqXHR.done (), jqXHR.fail () ve jqXHR.always () kullanabilirsiniz.


3
Bu hiç soru ile ilgili değil, kullanımdan kaldırılan yöntemlerin hiçbiri bu soru ile kullanılmıyor ..
Kevin B

2

AJAX işlevinizde bir hata var, çok fazla parantez, bunun yerine deneyin $.ajax({


2

Ajax işlevinden sonra parantez ve bağımsız değişken listesini tanımlamak için başka bir parantez kümesi yerleştirdiğinizde sözdizimi hatası var: -

Yazdığınız gibi: -

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

Ajax'ın etrafındaki parantez kaldırılmalıdır: -

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

2

Ajax içeren jquery min sürümüne bakın:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

1

Aynı soru ile karşılaştım ve benim çözüm: JQuery komut dosyası ekleyin.

Özellikle, js'de firefox / chrome altında hata ayıkladığımızda ilgili JQuery'nin yüklendiğinden emin olmalıyız.


1

Bootstrap html şablonu kullanıyorsanız, şablonun altındaki jquery slim bağlantısını kaldırmayı unutmayın. Bu ayrıntıyı buraya gönderiyorum çünkü henüz cevapları yorumlayamıyorum ..


0

Düğümlerde çalıştırmayı deneyen herkes için : jquery'nin bir tarayıcıya (veya benzeri) ihtiyacı olduğu için kutunun dışında çalışmayacak! Sadece çalıştırmak için ithalat almaya çalışıyordum ve console.log($)hangi yazdı [Function]ve sonra da console.log($.ajax)geri günlüğe kaydediyordu undefined. Hiçbir tschatayla karşılaşmadım ve intellij'in otomatik tamamlaması vardı, bu yüzden neler olduğunu merak ediyordum.

Sonra bir noktada nodebunun yazı tipi değil problem olabileceğini fark ettim . Tarayıcıda aynı kodu denedim ve çalıştı. Çalıştırmak için çalıştırmanız gerekir:

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

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

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


-1

Bu bir cevap için çok geç, ancak bu yanıt gelecekteki okuyucular için yararlı olabilir.

Birden fazla html dosyası ( bir temel html ve birden fazla alt HTML ) ve $ .ajax alt HTML'lerinden birinde kullanıldığını söyleyen bir senaryo paylaşmak istiyorum .

Alt HTML'de js " https://code.jquery.com/jquery-3.5.0.js " URL'si ile ve temel / ana HTML'de, URL aracılığıyla "- https: //code.jquery .com / jquery-3.1.1.slim.min.js "olarak adlandırılırsa, JS'nin ince sürümü, bu alt HTML'yi ve yukarıda belirtilen temel HTML'yi kullanan tüm sayfalarda kullanılır.

Bu, özellikle " https://code.jquery.com/jquery-3.1.1.slim.min.js " kullanarak js yükleyen bootstrap çerçevesi kullanıldığında geçerlidir .

Bu nedenle, sorunu çözmek için, js'nin tüm sayfalarda " https://code.jquery.com/jquery-3.5.0.js " URL'sinden veya tüm JQuery kitaplıklarını içeren en son URL'nin ne olduğundan emin olun.

Beni bu cevaba yönlendirdiği için Lily H.'ye teşekkürler .


-2

deneyimlerimi paylaşmama izin ver:

benim html sayfa tasarımcısı kullanımı:

<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>

basit bir AJAX isteği oluşturduğumda hata alıyorum diyor ki TypeError: $ .ajax (…) bir işlev değil

Yani, ekliyorum:

<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>

en azından benim için mükemmel çalışıyor.


Hayır. JQuery slim yüklemesi ve hemen jQuery ile üzerine yazılması tamamen anlamsızdır ve bant genişliği kaybıdır.
Quentin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.