在WooCommerce中使用AJAX更新购物车运输数据 [英] Update cart shipping data with AJAX in WooCommerce
本文介绍了在WooCommerce中使用AJAX更新购物车运输数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用AJAX更新结帐购物车的运费...
I'm trying to update my checkout cart's shipping with AJAX...
我已经在functions.php中得到了动作
I've got the action in functions.php
function jwd_update_shipping()
{
WC()->cart->calculate_shipping();
echo "hi";
die();
}
add_action('jwd_update_shipping_callback', 'jwd_update_shipping');
然后在js中我将其称为
Then in js I call it, like so
jQuery.ajax({
type: "POST",
url: 'MYSITE.com/wp-admin/admin-ajax.php',
data: ({
action: "jwd_update_shipping"
}),
success: function(response) {
console.log("got this: " + response);
if (response.type == "success") {
alert("here");
jQuery('body').trigger('update_checkout');
} else {
alert("fail");
}
},
error: function(request, status, error) {
alert(request.responseText);
}
});
我刚收到一个0提醒我,这表明AJAX调用失败.
I just get a 0 alerted back at me, which suggests that the AJAX call failed.
推荐答案
首先,您的ajax请求未达到相关的php函数…另外,您还需要更多东西来刷新结帐…请尝试以下操作:
First your ajax request is not reaching the related php function… Also you need more things to refresh checkout… Try the following instead:
// The jQuery script that send the Ajax request
add_action( 'wp_footer', 'refresh_shipping_js' );
function refresh_shipping_js() {
// Only on checkout
if( is_checkout() && ! is_wc_endpoint_url() ):
?>
<script type="text/javascript">
jQuery( function($){
if (typeof wc_checkout_params === 'undefined')
return false;
var refresh = 'yes';
$.ajax({
type: "POST",
url: wc_checkout_params.ajax_url,
data: ({
'action': 'updating_shipping',
'refresh_shipping': refresh,
}),
success: function(response) {
if( response === '1' ) {
$(document.body).trigger('update_checkout');
console.log('Success: '+response); // For testing (to be removed)
} else {
console.log('Failled: '+response); // For testing (to be removed)
}
},
error:function(error) {
console.log('Error: '+error); // For testing (to be removed)
}
});
});
</script>
<?php
endif;
}
// function that gets the Ajax data
add_action( 'wp_ajax_updating_shipping', 'updating_shipping' );
add_action( 'wp_ajax_nopriv_updating_shipping', 'updating_shipping' );
function updating_shipping() {
if ( isset($_POST['refresh_shipping']) && $_POST['refresh_shipping'] === 'yes' ){
WC()->session->set('refresh_shipping', '1' );
} else {
WC()->session->set('refresh_shipping', '0' );
}
echo WC()->session->get('refresh_shipping');
die(); // Alway at the end (to avoid server error 500)
}
// Function that refresh session shipping methods data
add_action( 'woocommerce_checkout_update_order_review', 'refresh_shipping_methods', 10, 1 );
function refresh_shipping_methods( $post_data ){
if ( WC()->session->get('refresh_shipping' ) === '1' ) {
foreach ( WC()->cart->get_shipping_packages() as $package_key => $package ){
WC()->session->set( 'shipping_for_package_' . $package_key, false );
}
WC()->cart->calculate_shipping();
}
}
这篇关于在WooCommerce中使用AJAX更新购物车运输数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文