ajaxurl ไม่ได้ถูกกำหนดไว้ที่ส่วนหน้า


25

ฉันพยายามสร้าง ajaxform ที่ด้านหน้า ฉันกำลังใช้รหัส

    jQuery.ajax(
        {
            type: "post",
            dataType: "json",
            url: ajaxurl,
            data: formData,
            success: function(msg){
                console.log(msg);
            }
        });

ซึ่งฉันได้รับข้อผิดพลาด

Uncaught ReferenceError: ajaxurl is not definedworklorAjaxBookForm @ 
?page_id=2:291onclick @ ?page_id=2:202

ในขณะที่ใช้รหัสที่คล้ายกันในงานแบ็กเอนด์ผู้ดูแลระบบ ฉันต้องใช้ URL ใดในการประมวลผลคำขอ ajax


ตรวจสอบบทช่วยสอนนี้ มันอาจช่วยคุณได้ 1stwebdesigner.com/implement-ajax-wordpress-themes
Nilambar

คำตอบ:


48

ในส่วนหลังมีajaxurlตัวแปรทั่วโลกที่กำหนดโดย WordPress เอง

ตัวแปรนี้ไม่ได้สร้างโดย WP ในส่วนหน้า หมายความว่าหากคุณต้องการใช้การโทร AJAX ในส่วนหน้าคุณต้องกำหนดตัวแปรดังกล่าวด้วยตัวเอง

wp_localize_scriptวิธีที่ดีในการทำเช่นนี้คือการใช้

สมมติว่าการโทร AJAX ของคุณอยู่ในmy-ajax-script.jsไฟล์จากนั้นเพิ่ม wp_localize_script สำหรับไฟล์ JS นี้ดังนี้:

function my_enqueue() {

    wp_enqueue_script( 'ajax-script', get_template_directory_uri() . '/js/my-ajax-script.js', array('jquery') );

    wp_localize_script( 'ajax-script', 'my_ajax_object',
            array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue' );

หลังจากแปลไฟล์ JS ของคุณแล้วคุณสามารถใช้my_ajax_objectวัตถุในไฟล์ JS ของคุณ:

jQuery.ajax(
    {
        type: "post",
        dataType: "json",
        url: my_ajax_object.ajax_url,
        data: formData,
        success: function(msg){
            console.log(msg);
        }
    });

2
ฉันสามารถใช้wp_localize_scriptโดยไม่ต้องใช้ได้wp_enqueue_scritpอย่างไร
dread_cat_pirate

1
คุณใช้หมายเลขอ้างอิงสคริปต์ใน wp_localize_script ดังนั้นคุณต้องใช้ wp_enqueue_script สำหรับสคริปต์ของคุณอย่างน้อยหนึ่งรายการ แต่ ... การไม่ใช้ wp_enqueue_script ไม่ใช่ความคิดที่ดี (คุณเสี่ยงต่อปัญหาข้อขัดแย้งและการอ้างอิง)
Krzysiek Dróżdż

ฉันไม่มีสคริปต์ภายนอกที่จะโหลดฉันแค่ต้องการใช้ ajaxurl เพื่อทำการโทร ajax เป็นไปไม่ได้เหรอ?
RT

แล้วคุณจะวางสาย AJAX นี้ที่ไหน เป็นสคริปต์แบบอินไลน์หรือไม่ มันเป็นความคิดที่เลวมาก ...
Krzysiek Dróżdż

ฉันมีรูปแบบที่แยกต่างหากในการที่ฉันจัดการการตรวจสอบและในการส่งโทร ajax เพื่อส่งแบบฟอร์มด้วยวิธี wordpress แน่นอนโดยการเพิ่มเบ็ด อย่างไรก็ตามฉันได้คิดวิธีการใช้ ajaxurl
RT

33

เพื่อใช้ ajaxurl โดยตรงในไฟล์ปลั๊กอินของคุณเพิ่มสิ่งนี้:

add_action('wp_head', 'myplugin_ajaxurl');

function myplugin_ajaxurl() {

   echo '<script type="text/javascript">
           var ajaxurl = "' . admin_url('admin-ajax.php') . '";
         </script>';
}

จากนั้นคุณสามารถใช้ajaxurlสำหรับคำขอ ajax


1
คำตอบนี้ทำให้ajaxurlคล้ายกับการใช้งานเริ่มต้น ซึ่งดีกว่าคำตอบที่ยอมรับได้มาก
Abel Melquiades Callejo

จริง แต่มันไร้ประโยชน์ถ้าคุณใช้มันในไฟล์. js
จูลส์

1
@Jules ajaxurlยังคงมีอยู่ใน*.jsไฟล์ หากต้องการทำเช่นนั้นคุณอาจต้องประกาศajaxurlตัวแปรก่อนล่วงหน้าของการโหลดหน้าเว็บ สิ่งที่ควรพิจารณาอีกอย่างคือการเรียกใช้*.jsไฟล์ภายนอกของคุณ ไฟล์ภายนอกควรจะเรียกว่าหลังจากที่ajaxurlได้รับการยกตัวอย่างและได้รับค่า URL ที่ถูกต้อง
Abel Melquiades Callejo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.