WP排队脚本顺序和本地化错误,需要钩子吗?

以下代码会产生错误:

注意:wp_enqueue_script被错误地调用。在wp_enqueue_scripts,admin_enqueue_scripts或login_enqueue_scripts挂钩之前,脚本和样式不应注册或排队。该通知是由waitlist_update_call句柄触发的。请参阅WordPress中的调试以获取更多信息。 (此消息是在版本3.3.0中添加的。)位于5225行的/home/food/domains/xyz.com/public_html/wp-includes/functions.php中。

它还在以下控制台中显示错误:
POST https://theste.com/wp-admin/admin-ajax.php 400 (Bad Request)

函数文件中的PHP代码

wp_enqueue_script( 'update_call',get_theme_file_uri( '/assets/js/update_call.js' ),array('jquery'),null,true );
wp_localize_script('update_call','my_ajax',array('ajax_url' => admin_url('admin-ajax.php')));

//calls Waitinglist data and creates table
add_action('wp_ajax_function_1','update_function'); // logged in user can make a call
add_action('wp_ajax_nopriv_function_1','update'); // non logged in user can make a call

function update_function() {
    global $wpdb;
    $results = $wpdb->query( $wpdb->prepare("UPDATE 'my_table_name' SET `currentstatus` =
    'myupdate1' WHERE ID = '1'"));
    die($results);
}

编辑1:

我试图直接调用它。请原谅。确定下面的拳头解决了入队问题,但POST 400错误仍然存​​在。错误是

POST https://x.com/wp-admin/admin-ajax.php 400 (Bad Request)

单击应该触发的按钮时,我得到-

Uncaught ReferenceError: update_functionis not defined
    at HTMLButtonElement.onclick

我已将函数文件中的PHP更改为:

function my_scripts() {   
wp_enqueue_script( 'update_call',array('ajax_url' => admin_url('admin-ajax.php')));
//calls Waitinglist data and creates table
}
add_action('wp_enqueue_scripts','my_scripts');

add_action('wp_ajax_function_1','waitlist_update'); // logged in user can make a call

function waitlist_update() {
    global $wpdb;
    $results = $wpdb->query( $wpdb->prepare("UPDATE 'wp_wpdatatable_4' SET `currentstatus` = 
    'myupdate1' WHERE wdt_ID = '1'"));
    die($results);

}

单独的JS文件是:

// JavaScript Document
jQuery.ajax({
    type: 'post',url: my_ajax.ajax_url,action: 'waitlist_update',success: function(data){
        // callback function
    }
});

HTML是:

<button class="seat-btn" ID="update" onclick="update_function()">Go!</button>
iCMS 回答:WP排队脚本顺序和本地化错误,需要钩子吗?

WordPress提供了使脚本正确入队的钩子。

您可能已经直接调用了enqueue方法。它应该在wp_enqueue_scripts钩子的操作回调中。

function my_scripts() {    
wp_enqueue_script('update-call',get_template_directory_uri() . '/assets/js/update_call.js',array('jquery'),false,true);
wp_localize_script('update-call','my_ajax',array(
        'ajax_url' => admin_url('admin-ajax.php')
    ));
}
add_action('wp_enqueue_scripts','my_scripts');

//calls Waitinglist data and creates table
add_action('wp_ajax_function_1','update_function'); // logged in user can make a call
add_action('wp_ajax_nopriv_function_1','update_function'); // non logged in user can make a call

如果您在以前的问题中检查了我以前的answerfunction_1是AJAX调用请求的操作,update_function是触发该操作时应调用的函数名。触发该操作后未登录的用户将根据您上面的代码(不正确)调用函数update

如果仅允许已登录的用户发出此请求,则可以删除针对未登录用户的第二项操作。

add_action('wp_ajax_nopriv_function_1','update_function'); // notice the nopriv?

注意: Ajax操作名称应与操作钩子匹配。

jQuery.ajax({
//...
data: {
  action: 'action_name'
}
});
// The action name should be same wp_ajax_{action_name} from whatever defined in jQuery action 
add_action('wp_ajax_action_name','update_function')
本文链接:https://www.f2er.com/1555045.html

大家都在问