我正试图保存人们暂停其WooCommerce订阅的原因。我为此制作了一个自定义插件。当用户单击暂停时,将运行JS脚本,并以单选按钮形式打开jQuery UI对话框(有一些原因)。单击“暂停”将提交用户的选择并杀死窗口。这可以在我的开发网站上完美运行,但是,只能在我的实时网站上偶尔运行。
这是JS的一部分:
$(popUpList).dialog({
modal: true,
width:'auto',
text: "text",
dialogClass: 'fancybox-container',
buttons: {
"Pauzeer": function() {
for( i = 0; i < document.pauzeerreden.cancelreason.length; i++ ) {
if( document.pauzeerreden.cancelreason[i].checked == true ) {
var val = document.pauzeerreden.cancelreason[i].value;
if(val=='other') {
document.pauzeerreden.cancelreason[i].value=document.pauzeerreden.overig.value;
is_other = 1;
}
}
}
$.ajax({
url: ajax_object.ajax_url,
type: 'POST',
data: {'action': 'wcs_cancel_confirmation', 'subscription_id' : subscription_id, 'reason_to_cancel': $('input[name="cancelreason"]:checked').val(), 'is_other': is_other}
});
window.location = that.href;
$(this).dialog("destroy");
},
"Ik wil toch niet pauzeren" : function() {
$(this).dialog("destroy");
}
}
});
return false;
});
这是发布到的PHP:
if ( is_account_page() ) {
wp_register_script( 'wcs-cancel-subscription-confirmation-script', plugin_dir_url( __FILE__ ) . 'wcs-cancel-subscription-confirmation.js', array( 'jquery' ), '1.0.0', true );
$script_atts = array(
'ajax_url' => admin_url( 'admin-ajax.php' ),
);
wp_localize_script( 'wcs-cancel-subscription-confirmation-script', 'ajax_object', $script_atts );
wp_enqueue_script( 'wcs-cancel-subscription-confirmation-script' );
}
}
add_action( 'wp_enqueue_scripts', 'wcs_cancel_subscription_confirmation' );
function wcs_cancel_confirmation() {
$subscription_id = intval( $_POST['subscription_id'] );
$reason_to_cancel = sanitize_text_field( $_POST['reason_to_cancel'] );
$subscription = wc_get_order( $subscription_id );
$email = $subscription->get_billing_email();
$is_other = $_POST['is_other'];
$note_id = $subscription->add_order_note( apply_filters( "wcs_cancel_confirmation_note_header", __( "Reden van pauzeren:", "wcs-cancel-confirmation" ) )."<br /><b><i>".$reason_to_cancel."</i></b>" );
$subscription->save(); }
该代码有效,为什么有时仅在我的实时网站上有效,原因是什么?如果您需要更大一部分的JS代码,请告诉我,我尝试将其尽可能缩小。
它在服务器日志中显示该呼叫未运行的时间:
[Sat Apr 27 18:19:15.040960 2019] [error] [pid 27049] mod_proxy_fcgi.c(860): [client xx.xxx.xxx.xx:62308] AH01071: Got error 'PHP message: -- $action = Array\n(\n [url] => /mijn-account/view-subscription/111573/?subscription_id=111573&change_subscription_to=on-hold&_wpnonce=ae31aa4954\n [name] => Pauzeren\n)\n\nPHP message: -- $action = Array\n(\n [url] => https://fridaymascara.com/mijn-account/?subscription_renewal_early=111573&subscription_renewal=true\n [name] => Vervroegen\n)\n\n'
[Sat Apr 27 18:19:26.783134 2019] [error] [pid 27049] mod_proxy_fcgi.c(860): [client xx.xxx.xx.xx:62311] AH01071: Got error 'PHP message: -- $action = Array\n(\n [url] => /mijn-account/view-subscription/111573/?subscription_id=111573&change_subscription_to=active&_wpnonce=da371dce3c\n [name] => Opnieuw activeren\n)\n\n'
但是,实际运行的呼叫会记录相同的内容。从错误日志来看,关于PHP代码或.htaccess文件的某些信息并不完全正确吗?
答案 0 :(得分:0)
原因最终是在AJAX调用完成之前重新加载页面!