在WordPress中使用AJAX和表单时,我喜欢将AJAX操作编码到表单中,这样序列化就可以开箱即用了。事实上,去年我写了一篇关于这个的文章:https://webdevstudios.com/2015/02/12/handling-ajax-in-wordpress/
但是,你是来寻求答案的,不是一篇博客文章,所以这里是简短的部分。这里有三个部分,第一部分是HTML表单。你可以利用serialize()
通过将操作放置在隐藏的表单字段中,下面是一个示例:
<form class="my_form">
<?php wp_nonce_field( \'my_action_nonce\' ); ?>
<input type="hidden" name="action" value="my_action" />
<!-- More fields here... -->
<input type="submit" name="submit" value="Submit" class="submit_form_btn" />
</form>
请注意名为
action
. 我当然保留了
wp_nonce_field()
因为安全问题。
第二部分是实际的jQuery,如前所述,您不需要通过原始jQuery对象访问AJAX,因为您已经将其作为$
, 但这并没有伤害任何东西,只是坏习惯。
jQuery( document ).ready( function( $ ) {
$( \'.submit_form_btn\' ).on( \'click\', function( evt ) {
// Stop default form submission
evt.preventDefault();
// Serialize the entire form, which includes the action
var serialized = $( \'.my_form\' ).serialize();
$.ajax( {
url: ajaxurl, // This variable somewhere
method: \'POST\',
data: serialized, // This is where our serialized data is
} ).done( function( result ){
// Handle the result here...
} );
} );
} );
我尽可能地对代码进行注释,这应该更有意义,但让我解释一下。首先,通过
preventDefault()
的方法
evt
对象(事件的缩写)。
然后序列化表单数据并将其存储在变量中。我想您可以将其设置为快捷方式,然后将其放入数据对象中,但这取决于您。
最后一部分,你需要看看你在发布什么,对吗?那就是error_log
和print_r
请随时使用,以下是操作方法:
<?php
function handle_ajax() {
// Here you verify your nonce
if ( ! wp_verify_nonce( $_POST[\'_wpnonce\'], \'my_action_nonce\' ) ) {
// You can either return, or use nifty json stuffs
wp_send_json_error();
}
// Here you should get ALL your data in a $_POST variable
// or you can actually do someting like this then check your error log
error_log( print_r( $_POST, 1 ) );
// This will print out the ENTIRE $_POST variable to your debug.log if you have it
// enabled, if not, it goes to your PHP error log
}
add_action( \'wp_ajax_my_action\', \'handle_ajax\' );
现在应该可以为您处理ajax了,如何处理数据取决于您自己。