Javascript Wordpress版本5.2。和Ajax错误请求400
我正在使用Wordpress 5.2的新版本,我需要调用ajax请求,但它不起作用。我在控制台中收到一条错误消息:错误请求400 这是js代码: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
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,它会返回什么?它会返回: