ajaxurl ön uçta tanımlanmadı


25

Ön tarafta bir ajaxform oluşturmaya çalışıyorum. Kod kullanıyorum

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

bunun için hata alıyorum

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

Yönetici benzer bir kod kullanırken arka uç çalışır. Ajax isteğini işlemek için hangi URL'yi kullanmalıyım?


Bu öğreticiyi kontrol edin. Size yardımcı olabilir. 1stwebdesigner.com/implement-ajax-wordpress-themes
— Nilambar

Yanıtlar:


48

Arka uçta ajaxurlWordPress'in kendisi tarafından tanımlanan genel değişken vardır .

Bu değişken WP tarafından ön uçta yaratılmamıştır. Bu, AJAX çağrılarını ön uçta kullanmak istiyorsanız, o zaman bu değişkeni kendiniz tanımlamanız gerektiği anlamına gelir.

Bunu yapmanın iyi yolu kullanmaktır wp_localize_script.

AJAX aramalarınızın my-ajax-script.jsdosyada olduğunu varsayalım , sonra şöyle bir JS dosyası için wp_localize_script ekleyin:

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 dosyanızı yerelleştirdikten sonra, JS dosyanızdaki my_ajax_objectnesneyi kullanabilirsiniz :

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

2
kullanmak wp_localize_scriptzorunda kalmadan kullanabilir wp_enqueue_scritpmiyim?
— dread_cat_pirate 3:15

1
Wp_localize_script içinde script handley kullanırsınız, bu yüzden scriptlerinizden en az biri için wp_enqueue_script kullanmanız gerekir. Ama ... wp_enqueue_script'i kullanmamak iyi bir fikir değildir (bazı çatışma ve bağımlılık problemlerini riske atarsınız).
— Krzysiek Dróżdż

yüklemek için herhangi bir harici komut dosyası yok, sadece bir ajax araması yapmak için ajaxurl kullanmak istiyorum. bu mümkün değil mi
— RT

Ve bu AJAX aramasını nereye koyacaksın? Satır içi komut dosyası olarak? Bu çok kötü bir fikir ...
— Krzysiek Dróżdż

ayrı bir formum var, onaylamayı yönetiyorum ve gönderimde, kanca ekleyerek elbette wordpress yoluyla form göndermek için bir ajax çağrısı yapıyorum. Zaten ajaxurl kullanmanın yolunu buldum.
— RT

33

ajaxurl'u doğrudan kullanmak için, eklenti dosyanızda şunu ekleyin:

add_action('wp_head', 'myplugin_ajaxurl');

function myplugin_ajaxurl() {

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

sonra ajaxurlajax isteğini kullanabilirsiniz.


1
Bu cevap ajaxurl, varsayılan kullanımla aynı şekildedir. Hangi cevaptan daha iyi ki.
— Abel Melquiades Callejo

true, ancak bir .js dosyasında kullanıyorsanız işe yaramaz.
— Jules

1
@Jules ajaxurlhala bir *.jsdosyada mevcut . Bunu yapmak için, ajaxurldeğişkeni sayfa yükünün başında açıklamanız gerekebilir . Dikkate alınması gereken bir başka şey de dış *.jsdosyanızın aranmasıdır. Dış dosya çağrılmalıdır SONRAajaxurl başlatılmış ve sağ URL değer verilir.
— Abel Melquiades Callejo
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.