前端未定义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

Answers:


48

在后端ajaxurl,WordPress本身定义了全局变量。

该变量不是由WP在前端创建的。这意味着,如果要在前端使用AJAX调用,则必须自己定义此类变量。

做到这一点的好方法是使用wp_localize_script

假设您的AJAX调用在my-ajax-script.js文件中,然后为该JS文件添加wp_localize_script,如下所示:

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文件中使用object:

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 2015年

1
您在wp_localize_script中使用脚本句柄,因此必须对至少一个脚本使用wp_enqueue_script。但是...不使用wp_enqueue_script不是一个好主意(您可能会遇到一些冲突和依赖问题)。
KrzysiekDróżdż

我没有要加载的任何外部脚本,我只想使用ajaxurl进行ajax调用。那不可能吗?
RT

您将把这个AJAX呼叫放在哪里?作为内联脚本?这是一个非常糟糕的主意...
KrzysiekDróż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>';
}

然后,您可以使用ajaxurlfor ajax请求。


1
该答案ajaxurl与默认用法类似。这比公认的答案要好得多。
Abel Melquiades Callejo

是的,但是如果您在.js文件中使用它,则没有用。
Jules

1
@Jules ajaxurl*.js文件中仍然可用。为此,您可能需要ajaxurl在页面加载的早期声明该变量。要考虑的另一件事是调用*.js您的外部文件。外部文件应在实例化调用,ajaxurl并为其指定正确的URL值。
Abel Melquiades Callejo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.