我正在尝试减去产品或从购物车中删除产品。假设我在购物车中有3个相同的商品,我想减去一个,但我使用的ajax不起作用。我在控制台日志上返回零。我这个零是来自wp die()。但是它会返回一些数据。
add_action( 'wp_enqueue_scripts', 'the_foody_enqueue_cartajax_scripts' );
if ( ! function_exists( 'the_foody_enqueue_cartajax_scripts' ) )
{
function the_foody_enqueue_cartajax_scripts() {
wp_enqueue_script( 'ajax-script', get_template_directory_uri().'/js/ajax-cart.js', array('jquery'), '1.0', true );
wp_localize_script( 'ajax-script', 'cart_ajax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
}
}
function the_foody_removefrom_cart_process(){
if( !wp_verify_nonce( $_POST['nonce'], 'foody_reservation_nonce' ) ){
die();
}
if( !isset($_POST['hash']) || !isset($_POST['quantity']) ){
exit;
}
$cart_item_key = $_POST['hash'];
if( !isset( WC()->cart->get_cart()[ $cart_item_key ] ) ){
exit;
}
$values = WC()->cart->get_cart()[ $cart_item_key ];
$_product = $values['data'];
// Sanitize
$quantity = apply_filters( 'woocommerce_stock_amount_cart_item', apply_filters( 'woocommerce_stock_amount', preg_replace( "/[^0-9\.]/", '', filter_var($_POST['quantity'], FILTER_SANITIZE_NUMBER_INT)) ), $cart_item_key );
if ( '' === $quantity || $quantity == $values['quantity'] )
exit;
// Update cart validation
$passed_validation = apply_filters( 'woocommerce_update_cart_validation', true, $cart_item_key, $values, $quantity );
if ( $passed_validation ) {
WC()->cart->set_quantity( $cart_item_key, $quantity, false );
}
// Recalc our totals
WC()->cart->calculate_totals();
return woocommerce_cart_totals();
}
add_action( 'wp_ajax_foody_removefrom_cart', 'the_foody_removefrom_cart_process' ); // If called from admin panel
add_action( 'wp_ajax_nopriv_foody_removefrom_cart', 'the_foody_removefrom_cart_process' );
function removefromCart( hash, nonce, qty ){
$.ajax({
action : 'foody_removefrom_cart',
type : 'POST',
url : cart_ajax.ajaxurl,
data : {
'hash' : hash,
'nonce' : nonce,
'quantity' : qty,
},
beforeSend : function(){
// codes to execute
},
success : function(response){
console.log(response);
}
})
}
但它在控制台中仅返回零。
在js中传递变量hash,nonce,qty都没关系。
来自here
的php代码
答案 0 :(得分:0)
您应该使用以下代码:
function removefromCart( hash, nonce, qty ){
$.ajax({
type : 'POST',
url : cart_ajax.ajaxurl,
data : {
'hash' : hash,
'nonce' : nonce,
'quantity' : qty,
action : 'the_foody_removefrom_cart_process',
},
beforeSend : function(){
// codes to execute
},
success : function(response){
console.log(response);
}
})
}
add_action( 'wp_ajax_the_foody_removefrom_cart_process', 'the_foody_removefrom_cart_process' ); // If called from admin panel
add_action( 'wp_ajax_nopriv_the_foody_removefrom_cart_process', 'the_foody_removefrom_cart_process' );
而不是
add_action( 'wp_ajax_foody_removefrom_cart', 'the_foody_removefrom_cart_process' ); // If called from admin panel
add_action( 'wp_ajax_nopriv_foody_removefrom_cart', 'the_foody_removefrom_cart_process' );
<强>更新强>
type : 'POST',
url : cart_ajax.ajaxurl,
data : {
'hash' : hash,
'nonce' : nonce,
'quantity' : qty,
action : 'the_foody_removefrom_cart_process',
},