WordPress使用依赖API注册依赖项。它相当简单:注册&;将脚本排队,然后使用wp_localize_script()
, 其中添加了<script>
包含DOM数组的标记(正好在脚本添加到DOM之前):
add_action( \'wp_enqueue_scripts\', function()
{
$name = \'handle\';
wp_register_script(
$name,
plugins_url( \'assets/ajax.js\', __FILE__ ),
[ \'jquery\' ],
filemtime( plugins_dir_path( __FILE__ ).\'assets/ajax.js\' ),
true
);
wp_enqueue_script( $name );
wp_localize_script(
$name,
"{$name}Obj", // This string is what gives you access to below array
[
\'ajaxurl\' => esc_url( admin_url( \'admin-ajax.php\' ) ),
\'_ajax_nonce\' => wp_create_nonce( "{$name}_action" ),
\'action\' => "{$name}_action",
\'data\' => [ /* additional data as array */ ],
]
);
} );
你可能会注意到,我
wp_create_nonce()
并出于安全原因(验证回调中请求的来源)向调用传递了一个action属性。
如何执行远程请求并获取XML数据当从远程请求加载数据时,应使用WP HTTP API, 但具有更高级别的功能。
示例插件,将执行请求并将结果添加到页脚下方(包括管理员和前端):
<?php
/** Plugin Name: (#160775) Fetch XML from TraceNow.net - Part 1 */
add_action( \'shutdown\', function()
{
$request = wp_remote_get(
\'http://services.tracenow.net/TraceNowAccess.asmx/GetConsignment?\'.
join( \'&\', [
\'consignmentNumber\' => \'lc0614061377\',
\'externalAccessGuid\' => \'d5dbffb4-0336-44bf-b72c-00fb9aaac759\'
],
);
$response = wp_remote_retrieve_body( $request, [
// *additional args
] );
is_wp_error( $response )
AND wp_send_json_error( $response->get_error_code() );
if (
\'OK\' !== wp_remote_retrieve_response_message( $response )
OR 200 !== wp_remote_retrieve_response_code( $response )
)
wp_send_json_error( $response );
var_dump( wp_send_json_success( $response ) );
} );
这是执行此类请求的最简单方法。如您所见,我使用的是JSON。XML从WPs HTTP API中消失了,因为JSON的某些版本更易于使用。
提示:wp_remote_*()
接受第二个参数,即can read about on Code.
无论AJAX是否已初始化,都要执行操作(请参见ajax 要了解更多信息),您需要一个表单。
<form id="asktracenow">
<input name="consignmentNumber" />
<input name="submit" value="submit" />
</form>
现在,此表单已提交
$_POST
在URl中使用数据之前,您需要对其进行清理。根据数据的构造方式,您有多个选项。首先我们只是
$cnum = trim( $_POST[\'consignmentNumber\'] )
, 然后我们进行验证,以防对其进行清理。
if ( false !== filter_var( $cnum, FILTER_VALIDATE_INT ) )
{
// do stuff with your absolute, positive integer
// adjust the check to only pass valid data
}
确保你在这件事上增加了很多分量——你永远不知道你会得到什么回报。
Ajaxing things只需将东西挂接到WP操作上。综上所述,这将密切关注以下内容。
// Public or private?
add_action( \'wp_ajax_handle_action\', function( $data )
{
check_ajax_referer( $data[\'action\'] );
# @TODO sanitize data here:
// filter_var() filter_var_array() and filter_input()
# @TODO Custom logic here
// Error?
if ( is_wp_error( $thing ) )
wp_send_json_error( $data );
// Success!
wp_send_json_success( $data );
} );
提示:将所有这些放在一个单独的插件中,以分离关注点和可移植性。
JavaScript AJAX/请求处理
为了让这个答案更完整,下面是
a link to another answer by me 这详细解释了这一点
huge example Gist 附件。