通过使用古老的管理AJAX API,您可以从响应中获得的唯一错误信息是HTTP错误代码或0
, 这两种方法都没有特别的帮助。
因此,首先,让我们实际处理jQuery中的失败,以便我们知道它何时失败:
jQuery.post(my_ajax_object.ajax_url, data, function(response) {
console.log("unlock 2 " + response);
mp_unlockContent2(payment, response);
}).fail( function( jqXHR, textStatus, errorThrown) {
// it failed!
console.log( errorThrown );
} );
现在,我们可以看到AJAX请求失败时包含的内容
接下来,让我们交换以下内容:
add_action ( \'wp_ajax_nopriv_mp_throwcontent_2\', \'mp_throwcontent_2\' );
function mp_throwcontent_2() {
// some ifs and so on
// echo "output"
}
为此:
add_action( \'rest_api_init\', \'add_custom_users_api\');
function add_custom_users_api(){
register_rest_route( \'bergmann/v1\', \'/throwcontent\', array(
\'methods\' => \'POST\',
\'callback\' => \'mp_throwcontent_2\',
));
}
function mp_throwcontent_2( $request ) {
$response = \'\';
// use $request[\'stuff\'] instead of $_POST[\'stuff\']
// otherwise put all the relevant stuff in $response
return $response;
}
现在我们的URL位于
yoursite.com/wp-json/bergmann/v1/throwcontent
, 如果我们
GET
请求(例如
jQuery.get
或者在浏览器中访问),我们将
$response
JSON格式。
因此,让我们更新本地化脚本:
wp_localize_script( \'ajax-script\', \'ajax_object\',
[
\'endpoint_url\' => rest_url( \'/bergmann/v1/throwcontent\' ),
\'we_value\' => 1234
]
);
然后更新我们的JS代码:
jQuery.post(
my_ajax_object.endpoint_url,
data,
function(response) {
const reply = JSON.parse( response );
console.log("unlock 2 " + reply );
mp_unlockContent2(payment, reply);
}
).fail( function( jqXHR, textStatus, errorThrown) {
// it failed!
console.log( errorThrown );
} );
一些注意事项:
缩进缩进缩进,要一致,一个好的编辑器会帮你做的,如果你得到了东西,它可以避免很多类型的bug,GET
东西,不要POST
除非您正在发送数据,否则Admin AJAX很旧,非常旧,如果您在REST API中出错,它只会在响应中用英语告诉您。E、 如果您请求一个不存在的端点,它会这样说,但Admin AJAX会给您一个0
神秘的回答你最初的问题可能与nopriv
, 如果您使用了REST API,它会告诉您,如果希望发送参数,您可以在发送过程中添加参数,而不是让您猜测register_rest_route
, WP将为您执行所有检查、消毒和验证工作,理想情况下,您可以放弃jQuery
支持更现代的fetch
对于旧浏览器,或者至少是jQuery.ajax
始终处理错误,不要只是提出请求,当请求不成功时再抓挠你的头,添加失败/错误处理程序!最糟糕的情况是,您会收到一条有用的错误消息