ajaxurl không được xác định ở mặt trước


25

Tôi đang cố gắng tạo ajaxform ở mặt trước. Tôi đang sử dụng mã

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

mà tôi đang nhận được lỗi

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

Trong khi sử dụng mã tương tự trên phụ trợ quản trị viên hoạt động. Tôi phải sử dụng url nào để xử lý yêu cầu ajax?


Kiểm tra hướng dẫn này. Nó có thể giúp bạn. 1stwebdesigner.com/im vây -ajax
Nilambar

Câu trả lời:


48

Trong phần phụ trợ có ajaxurlbiến toàn cục được xác định bởi chính WordPress.

Biến này không được tạo bởi WP trong frontend. Điều đó có nghĩa là nếu bạn muốn sử dụng các cuộc gọi AJAX ở lối vào, thì bạn phải tự xác định biến đó.

Cách tốt để làm điều này là sử dụng wp_localize_script.

Giả sử các cuộc gọi AJAX của bạn nằm trong my-ajax-script.jstệp, sau đó thêm wp_localize_script cho tệp JS này như sau:

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' );

Sau khi bản địa hóa tệp JS của bạn, bạn có thể sử dụng my_ajax_objectđối tượng trong tệp JS của mình:

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

2
Tôi có thể sử dụng wp_localize_scriptmà không cần phải sử dụng wp_enqueue_scritp?
dread_cat_pirate

1
Bạn sử dụng xử lý tập lệnh trong wp_localize_script, vì vậy bạn phải sử dụng wp_enqueue_script cho ít nhất một trong các tập lệnh của mình. Nhưng ... Không sử dụng wp_enqueue_script không phải là một ý tưởng hay (bạn có nguy cơ gặp phải một số vấn đề về xung đột và phụ thuộc).
Krzysiek Dróżdż

Tôi không có bất kỳ tập lệnh bên ngoài nào để tải, tôi chỉ muốn sử dụng ajaxurl để thực hiện cuộc gọi ajax. điều đó là không thể
RT

Và bạn sẽ đặt cuộc gọi AJAX này ở đâu? Là kịch bản nội tuyến? Đó là một ý tưởng rất tồi ...
Krzysiek Dróżdż

Tôi có một biểu mẫu riêng, trong đó tôi đang quản lý xác thực và khi gửi, một cuộc gọi ajax để gửi biểu mẫu với tất nhiên là cách wordpress bằng cách thêm hook. dù sao tôi cũng đã tìm ra cách sử dụng ajaxurl.
RT

33

để sử dụng ajaxurl trực tiếp, trong tệp plugin của bạn thêm điều này:

add_action('wp_head', 'myplugin_ajaxurl');

function myplugin_ajaxurl() {

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

sau đó bạn có thể sử dụng ajaxurlyêu cầu ajax.


1
Câu trả lời này làm cho ajaxurltương tự như cách sử dụng mặc định. Đó là tốt hơn nhiều so với câu trả lời được chấp nhận.
Abel Melquiades Callejo

đúng, nhưng nó vô dụng nếu bạn đang sử dụng nó trong tệp .js.
Jules

1
@Jules ajaxurlvẫn có sẵn trong một *.jstập tin. Để làm như vậy, bạn có thể cần khai báo ajaxurlbiến sớm khi tải trang. Một điều khác cần xem xét là việc gọi *.jstệp bên ngoài của bạn. Các tập tin bên ngoài nên được gọi là SAU sự ajaxurlđã được khởi tạo và được cung cấp các giá trị URL đúng.
Abel Melquiades Callejo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.