首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过jquey调用时没有定义wp_localized_script。

通过jquey调用时没有定义wp_localized_script。
EN

WordPress Development用户
提问于 2018-10-09 01:29:53
回答 1查看 3.1K关注 0票数 4

我正在努力使我的ajax请求生效。当我发射我的$ajax并得到这个错误时,它失败了.

Uncaught ReferenceError: feature_ajax未定义为

这是我的functions.php

代码语言:javascript
复制
// load our frontend modifiers
require_once(__DIR__ . '/lib/Frontend.lib.php');

这是我的Frontend.lib.php类php。

代码语言:javascript
复制
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脚本时,这就是我没有定义错误feature_ajax的时候。

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

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

代码语言:javascript
复制
// 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固定代码

所以我改变了什么让这件事起作用。我已经对我的main-min.js文件进行了排队,所以我使用与我排队的javascript相同的句柄组合了我的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')
EN

回答 1

WordPress Development用户

回答已采纳

发布于 2018-10-09 02:14:05

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

  1. wp_寄存器_脚本
  2. wp_局部化_脚本
  3. wp_排队_脚本

在你的情况下,你错过了wp_register_script。如果有人遇到同样的问题,请按照下面的代码过程操作。

PHP

代码语言:javascript
复制
 admin_url('admin-ajax.php')
        ]);

        // Enqueue the script
        wp_enqueeu_script($handle);
    }
    add_action('wp_enqueue_scripts', 'my_theme_wp_enqueue_scripts');

然后,可以访问Javascript中的本地化对象。

代码语言:javascript
复制
var ajax_url = object_name.ajax_url;
console.log(ajax_url);

更改$handle变量内容以及PHP中的object_name,这对您的应用程序是有意义的。

票数 4
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/316199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档