TypeError: $ .ajax (…) ไม่ใช่ฟังก์ชันใช่ไหม


231

ฉันกำลังพยายามสร้างคำขอ AJAX อย่างง่ายซึ่งคืนค่าข้อมูลบางส่วนจากฐานข้อมูล MySQL นี่คือหน้าที่ของฉันด้านล่าง:

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

... และนี่คือที่ที่ฉันเรียกว่าการแยกพารามิเตอร์ที่ต้องการ:

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

แต่การโทรกลับสำเร็จของฉันไม่ทำงาน (เนื่องจาก "สำเร็จ!" ไม่ได้เข้าสู่คอนโซล) และฉันได้รับข้อผิดพลาดในคอนโซล:

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

สิ่งนี้หมายความว่า? ฉันได้ทำคำขอ AJAX ก่อนที่เหตุการณ์ความสำเร็จจะเรียกใช้ฟังก์ชันที่ไม่ระบุชื่อภายใน $ .ajax แต่ตอนนี้ฉันพยายามเรียกใช้ฟังก์ชันที่มีชื่อแยกต่างหาก (ในกรณีนี้คือการเรียกกลับ) ฉันจะไปเกี่ยวกับเรื่องนี้ได้อย่างไร


2
ไม่ว่าจะเป็น jquery รวม
Arun P Johny

2
เปลี่ยน $ .ajax นี้ () ({เป็น $ .ajax ({
Prabhu Murthy

3
คุณเรียกใช้$.ajaxโดยไม่มีอาร์กิวเมนต์ ( $.ajax()) และค่าส่งคืนเป็นวัตถุ jqXHR ซึ่งไม่ใช่ฟังก์ชัน ดังนั้น$.ajax()(...)จะโยนข้อผิดพลาด
เฟลิกซ์คลิง

2
คุณไม่ได้รวม jquery.js หรือคุณได้รวม jquery.js ไว้ด้านล่างการเรียกใช้ฟังก์ชันหรือโปรดลอง jQuery.ajax (แทนที่ $ ด้วย jQuery)
Pranay Bhardwaj

90
ในกรณีของฉันมันเป็นเพราะผมใช้บาง minifiedรุ่นของ JQuery ซึ่งจะมีฟังก์ชั่นอาแจ็กซ์
TomNg

คำตอบ:


952

ไม่มีคำตอบที่นี่ช่วยฉันได้ ปัญหาคือ: ฉันใช้ jQuery แบบบางซึ่งได้ลบบางสิ่งออกอาแจ็กซ์เป็นหนึ่งในนั้น

วิธีแก้ปัญหา: เพียงดาวน์โหลด jQuery เวอร์ชันปกติ (บีบอัดหรือไม่) ที่นี่และรวมไว้ในโครงการของคุณ


56
นี่คือสิ่งที่แก้ไขปัญหาของฉัน! jQuery คืออะไรห่า ?? เหตุใดจึงถูก$.ajaxลบออกจากโครงสร้าง "แบบบาง"
samnau

57
การสร้างที่บางเฉียบอ้างสิทธิ์เหยื่อรายอื่น
Drew Kennedy

49
ฉันคัดลอกรหัสจาก Bootstrap พวกเขาใช้รุ่นที่บางเฉียบ บางทีคุณด้วย
Cyril N.

126

ตรวจสอบอีกครั้งว่าคุณใช้ jquery เวอร์ชันเต็มหรือไม่และบางรุ่น

ฉันใช้ jquery cdn-script link ที่มาพร้อมกับ jquery ปัญหาคือสิ่งนี้โดยค่าเริ่มต้นคือ slim.jquery.js ซึ่งไม่มีajaxฟังก์ชั่นในตัว ดังนั้นหากคุณกำลังใช้ (คัดลอกวางจากเว็บไซต์ Bootstrap) การเชื่อมโยงสคริปต์รุ่น jquery เพรียวบางให้ใช้เวอร์ชันเต็มแทน

กล่าวคือใช้ <script src="https://code.jquery.com/jquery-3.1.1.min.js"> แทน <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"


27

ไม่แน่ใจ แต่ดูเหมือนว่าคุณมีข้อผิดพลาดทางไวยากรณ์ในรหัสของคุณ ลอง:

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

คุณมีวงเล็บพิเศษติดกับ$.ajaxที่ไม่จำเป็น หากคุณยังคงได้รับข้อผิดพลาดไฟล์สคริปต์ jQuery จะไม่ถูกโหลด


2
ไม่ใช่ข้อผิดพลาดทางไวยากรณ์ ค่าที่ส่งคืนนั้นคาดว่าจะเป็นฟังก์ชันที่ไม่ใช่
เฟลิกซ์คลิง

อ่าฉันเข้าใจแล้ว ดังนั้นปัญหานี้เป็นเพียงการอ้างอิงไฟล์สคริปต์ jQuery ที่ขาดหายไปจริงๆ
Jason Evans

3
$.ajax()();ดูเลขที่มันเป็น นี่คือ JavaScript ที่ถูกต้อง มันหมายถึง "การโทร$.ajaxและอะไรก็ตามที่ส่งคืนเรียกมันเช่นกัน" แต่$.ajaxจะไม่ส่งคืนฟังก์ชัน (ซึ่งอาจเรียกได้ว่า) แต่จะส่งคืนjqXHRวัตถุดังนั้นจึงเกิดข้อผิดพลาดขึ้น คำตอบของคุณถูกต้องส่วนเพิ่มเติม()เป็นปัญหา แต่คำอธิบายปัญหาไม่ถูกต้อง (ไม่ใช่ข้อผิดพลาดทางไวยากรณ์อย่างน้อยก็ไม่ใช่สำหรับตัวแยกวิเคราะห์)
เฟลิกซ์คลิง

ไม่ขอโทษนั่นคือสิ่งที่ฉันระบุในความคิดเห็นก่อนหน้าของฉัน; นี่ไม่ใช่ปัญหาข้อผิดพลาดทางไวยากรณ์เนื่องจากไวยากรณ์นั้นถูกต้อง แต่เป็นปัญหากับไฟล์สคริปต์ jQuery ที่ไม่ได้โหลดในเวลา $ .ajax () ถูกใช้
Jason Evans

2
ไม่ jquery.js จะไม่หายไป (หากเป็นข้อผิดพลาดจะเกี่ยวกับ$) แต่ไม่ใช่ข้อผิดพลาดทางไวยากรณ์ทั้งที่เป็น JS ที่ถูกต้อง มันไม่ได้เป็นไวยากรณ์ที่เหมาะสมสำหรับพฤติกรรมที่ต้องการดังนั้นจึงทำให้เกิดข้อผิดพลาดรันไทม์ตามที่อธิบายโดยเฟลิกซ์
nnnnnn

9

ชำระเงินเอกสาร Jquery

ประกาศการเลิกใช้ : jqXHR.success (), jqXHR.error () และ jqXHR.complete () การโทรกลับจะถูกลบออกเมื่อ jQuery 3.0 คุณสามารถใช้ jqXHR.done (), jqXHR.fail () และ jqXHR.always () แทน


3
นี้ไม่เกี่ยวข้องกับคำถามเลยไม่มีวิธีการคัดค้านที่ใช้กับคำถามนี้ ..
Kevin B

3

คุณมีข้อผิดพลาดในฟังก์ชั่น AJAX ของคุณลองวงเล็บแทนมากเกินไป $.ajax({



2

มีข้อผิดพลาดทางไวยากรณ์ขณะที่คุณวางวงเล็บหลังฟังก์ชัน ajax และวงเล็บชุดอื่นเพื่อกำหนดรายการอาร์กิวเมนต์: -

ตามที่คุณเขียน: -

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

วงเล็บที่อยู่รอบ ๆ อาแจ็กซ์จะต้องถูกลบออกมันควรจะเป็น: -

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

1

ฉันพบคำถามเดียวกันและวิธีแก้ปัญหาของฉันคือเพิ่มสคริปต์ JQuery

โดยเฉพาะอย่างยิ่งเราควรตรวจสอบให้แน่ใจว่ามีการโหลด JQuery ที่เกี่ยวข้องเมื่อเราทำการดีบัก js ของเราภายใต้ firefox / chrome


1

หากคุณใช้ bootstrap html template อย่าลืมลบลิงค์ไปยัง jquery slim ที่ด้านล่างของ template ฉันโพสต์รายละเอียดนี้ที่นี่เนื่องจากฉันยังไม่สามารถแสดงความคิดเห็นคำตอบได้ ..


0

สำหรับทุกคนที่พยายามใช้งานในnodejs : มันจะไม่ทำงานนอกกรอบเนื่องจาก jquery ต้องการเบราว์เซอร์ (หรือคล้ายกัน)! ผมก็แค่พยายามที่จะนำเข้าในการทำงานและการเข้าสู่ระบบconsole.log($)ที่เขียน[Function]แล้วยังซึ่งกลับconsole.log($.ajax) undefinedฉันไม่มีtscข้อผิดพลาดและมีการเติมข้อความอัตโนมัติจาก Intellij ดังนั้นฉันจึงสงสัยว่าเกิดอะไรขึ้น

เมื่อถึงจุดหนึ่งฉันก็ตระหนักว่าnodeอาจเป็นปัญหาและไม่ใช่ตัวพิมพ์ดีด ฉันลองใช้รหัสเดียวกันในเบราว์เซอร์และใช้งานได้ ในการทำให้ทำงานคุณต้องเรียกใช้:

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

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

(เครดิต: https://stackoverflow.com/a/4129032/3022127 )


-1

คำตอบนี้สายเกินไป แต่การตอบกลับนี้อาจเป็นประโยชน์สำหรับผู้อ่านในอนาคต

ฉันต้องการแบ่งปันสถานการณ์ที่สมมติว่ามีไฟล์ html หลายไฟล์ ( หนึ่งฐาน html และหลาย sub-HTMLs ) และ $ .ajax กำลังถูกใช้ในหนึ่งใน sub-HTMLs

สมมติว่าใน HTML ย่อย js รวมอยู่ใน URL " https://code.jquery.com/jquery-3.5.0.js " และใน HTML พื้นฐาน / หลักผ่าน URL - " https: //code.jquery" .com / jquery-3.1.1.slim.min.js "จากนั้น JS รุ่นเพรียวบางจะถูกใช้ในทุกหน้าซึ่งใช้ sub-HTML นี้รวมถึง HTML พื้นฐานที่กล่าวถึงข้างต้น

นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งในกรณีที่ใช้เฟรมเวิร์ก bootstrap ซึ่งโหลด js โดยใช้ " https://code.jquery.com/jquery-3.1.1.slim.min.js "

ดังนั้นในการแก้ไขปัญหาจำเป็นต้องตรวจสอบให้แน่ใจว่าในทุก ๆ หน้า js จะรวมอยู่ใน URL " https://code.jquery.com/jquery-3.5.0.js " หรือ URL ล่าสุดที่มีไลบรารี JQuery ทั้งหมด

ขอบคุณLily H. ที่ชี้ให้ฉันเห็นคำตอบนี้


-2

ให้ฉันแบ่งปันประสบการณ์ของฉัน:

ผู้ออกแบบเพจ html ของฉันใช้:

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

เมื่อฉันสร้างคำขอ AJAX อย่างง่ายรับข้อผิดพลาดที่แจ้งว่า TypeError: $ .ajax (…) ไม่ใช่ฟังก์ชัน

ดังนั้นฉันเพิ่ม:

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

จากนั้นมันทำงานได้อย่างสมบูรณ์แบบสำหรับฉันอย่างน้อย


ไม่การโหลด jQuery เพรียวบางแล้วเขียนทับมันทันทีด้วย jQuery ไม่มีจุดหมายอย่างที่สุดและเสียแบนด์วิดท์
Quentin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.