通过jquey AJAX调用时未定义WP_LOCALIZED_SCRIPT

时间:2018-10-09 作者:joshmoto

我正在努力让我的ajax请求正常工作。当我解雇我的$ajax 我得到了这个错误。。。

Uncaught ReferenceError: feature_ajax is not defined

这是我的functions.php

// load our frontend modifiers
require_once(__DIR__ . \'/lib/Frontend.lib.php\');
这是我的Frontend.lib.php 类php。。。

class Frontend
{

    /** frontend constructor */
    public function __construct()
    {

        // enqueue our scripts
        add_action(\'wp_enqueue_scripts\', array($this, \'action_wp_enqueue_scripts\'));

        // add out ajax actions
        $this->ajax_actions();

    }

    /** frontend enqueued scripts */
    public function action_wp_enqueue_scripts()
    {

        // localize admin ajax
        wp_localize_script(\'ajax-actions\', \'ajax_actions\', array(
            \'ajaxurl\' => admin_url( \'admin-ajax.php\' )
        ));

        // enqueue scripts
        wp_enqueue_script(\'ajax-actions\');

    }


    /** ajax actions */
    public function ajax_actions()
    {

        // admin field postdata ajax actions
        add_action(\'wp_ajax_field_postdata\', [__CLASS__, \'field_postdata\']);

        // public field postdata ajax actions
        add_action(\'wp_ajax_nopriv_field_postdata\', [__CLASS__, \'field_postdata\']);

    }

    // Field Post Data
    public static function field_postdata()
    {
        global $post;
        $post_id = ($_REQUEST[\'id\']);

        if($post_id){
            $post = get_post($post_id);
            setup_postdata($post);
            get_template_part(\'ajax/modal\',\'field\');
            die();
        }

    }

}

new Frontend();
当我启动$ajax 下面的脚本,这是当我得到错误时,没有定义ajax。

但它是在上面的代码中定义的。

下面的脚本是我的theme-min.js 文件

// load feature post data
$.ajax({
    cache: false,
    timeout: 8000,
    url: ajax_actions.ajaxurl,
    type: \'POST\',
    data: {
        action: \'field_postdata\',
        id: post_id
    },
    success: function (data) {
        alert(data);
    }
});
如果能帮我理解我做错了什么,那就太好了。

谢谢

<小时>

Updated Fixed Code

所以,我改变了什么,使这项工作。我已经在排队了main-min.js 文件,所以我将wp_localize_script 使用与我排队的javascript相同的句柄,它就工作了。

// register js in footer
$filename = get_template_directory_uri() . \'/assets/scripts/main-min.js\';
wp_register_script(\'main-js\', $filename, array(), rand(), true);

// localize theme-js ajax actions
wp_localize_script(\'main-js\', \'ajax_actions\', array(
    \'ajaxurl\' => admin_url( \'admin-ajax.php\' )
));

// enqueue required scripts
wp_enqueue_script(\'main-js\')

1 个回复
最合适的回答,由SO网友:Den Isahac 整理而成

要成功将变量添加到window 对象通过wp_localize_script 您需要按照以下顺序正确调用三个函数:

  1. wp_register_script

  2. wp_localize_script

  3. wp_enqueue_script

    wp_register_script. 如果有人遇到相同的问题,请遵循以下代码过程。

    PHP

    <?php
        function my_theme_wp_enqueue_scripts() {
            $handle = \'my_handle\';
    
            // Register the script
            wp_register_script($handle, \'/path/to/my_script.js\');
    
            // Localize the script with a new data
            wp_localize_script($handle, \'object_name\', [
                \'ajax_url\' => admin_url(\'admin-ajax.php\')
            ]);
    
            // Enqueue the script
            wp_enqueeu_script($handle);
        }
        add_action(\'wp_enqueue_scripts\', \'my_theme_wp_enqueue_scripts\');
    
    然后,可以在中访问本地化对象Javascript

    var ajax_url = object_name.ajax_url;
    console.log(ajax_url);
    
    更改$handle 可变内容以及object_name 在里面PHP 这对您的应用程序很有意义。

结束

相关推荐