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.