我正在努力使我的ajax请求生效。当我发射我的$ajax并得到这个错误时,它失败了.
Uncaught ReferenceError: feature_ajax未定义为
这是我的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脚本时,这就是我没有定义错误feature_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固定代码
所以我改变了什么让这件事起作用。我已经对我的main-min.js文件进行了排队,所以我使用与我排队的javascript相同的句柄组合了我的wp_localize_script,并且它工作了。
// 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')发布于 2018-10-09 02:14:05
要通过window成功地向wp_localize_script对象添加变量,您需要按照以下顺序正确调用三个函数:
在你的情况下,你错过了wp_register_script。如果有人遇到同样的问题,请按照下面的代码过程操作。
PHP
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变量内容以及PHP中的object_name,这对您的应用程序是有意义的。
https://wordpress.stackexchange.com/questions/316199
复制相似问题