Javascript Wordpress版本5.2。和Ajax错误请求400

Javascript Wordpress版本5.2。和Ajax错误请求400,javascript,php,wordpress,Javascript,Php,Wordpress,我正在使用Wordpress 5.2的新版本,我需要调用ajax请求,但它不起作用。我在控制台中收到一条错误消息:错误请求400 这是js代码: jQuery.ajax({ type: "POST", url : test_ajax.url, data: { action: 'say_hello_test', security : test_ajax.security, valore_trasmesso : 'Hello world!' }, success: funct

我正在使用Wordpress 5.2的新版本,我需要调用ajax请求,但它不起作用。我在控制台中收到一条错误消息:错误请求400

这是js代码:

jQuery.ajax({
type: "POST",
url : test_ajax.url,
data: {
    action: 'say_hello_test',
    security : test_ajax.security,
    valore_trasmesso : 'Hello world!'
},
success: function( data ) {
    // Insert code
},
error: function( error ) {
    // Insert code
}
}))

这是functions.php文件中的代码

function enqueue_ajax_script_test()
{
wp_localize_script( 'script_ajax_test', 'test_ajax', array(
   'url'      => admin_url( 'admin-ajax.php' ),
   'security' => wp_create_nonce('ajax_test_nonce_string')
 ));
}
add_action( "wp_enqueue_scripts", "enqueue_ajax_script_test" );


function say_hello_test_callback()
{
check_ajax_referer( 'sct_nonce_key', 'security' );

$parametro_ajax = trim( $_POST['valore_trasmesso'] );
echo $parametro_ajax;

wp_send_json( array( 'responso' => 'callback eseguita' ) );
die();
}
// Logged users
add_action( 'wp_ajax_nopriv_say_hello_test', 'say_hello_test_callback' );
// Not logged users
add_action( 'wp_ajax_say_hello_test', 'say_hello_test_callback' );

我做错了什么?

代码中存在许多错误,这些错误将阻止此功能正常工作。导致HTTP 400错误的直接问题是,
test\u ajax.url
在给定上下文中不存在,因此ajax请求没有url属性

wp\u本地化\u脚本()
要使用此函数,必须为其指定要将数据附加到的脚本句柄。如果不将其附加到脚本,JavaScript对象将不会在前端启动

解决方案:使用
wp\u enqueue\u script()

例如:

function enqueue_ajax_script_test() {
    wp_enqueue_script( 'script_ajax_test', get_stylesheet_directory_uri() . '/js/script_ajax_test.js', ['jquery'], '1.0.0', true );
    wp_localize_script( 'script_ajax_test'...
根据需要修改上述内容。也许你已经把你的定制JS排到其他地方,只需要把它放进去。如果要在模板中嵌入JS,可能需要定制JS文件。无论哪种方式,要使用
wp\u localize\u script
,您都需要一个脚本将其附加到

检查\u ajax\u referer()
随着JavaScript对象进入前端,AJAX请求现在正确启动,我们需要处理下一个障碍。如果
检查\u ajax\u referer
失败,您将得到一个HTTP403响应

在上面的脚本中,它将失败,因为您在一个名称下创建一个nonce,然后将其作为另一个名称进行检查。在
wp\u localize\u script
中,它被创建为
ajax\u test\u nonce\u string
,因此这就是您需要测试的名称

check_ajax_referer( 'ajax_test_nonce_string', 'security' );
您将如何响应AJAX调用? 在您的情况下,您可以直接输出(echo)并使用
wp\u send\u json()
。您的响应类型不能同时为字符串和JSON

wp\u send\u json()
也将为您处理退出。这可以简化为:

function say_hello_test_callback() {
    check_ajax_referer( 'ajax_test_nonce_string', 'security' );
    wp_send_json([
        'responso' => sanitize_text_field( $_POST['valore_trasmesso'] ),
    ]);
}

嗨,谢谢你的回复…不幸的是问题还没有解决…@sodskat我恐怕这还不够我继续尝试并帮助进一步调试。如果在控制台中键入test_ajax.url,它会返回什么?它会返回: