ajax没有回发的原因,为什么ajax请求没有发送所有数据?

博客作者在使用WordPress和WooCommerce时遇到一个问题,即在商店和类别页面上,当用户点击产品尺寸按钮时,产品没有按照预期添加到购物车,尽管AJAX请求看起来是成功的。作者已经尝试了通过自定义端点和JS文件实现点击尺寸按钮直接添加到购物车的功能,但产品被添加到购物车时并未携带选定的尺寸信息。问题可能出在数据传递或回调函数处理上,作者寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在使用wordpresss和woocommerce进行电子商务,即时添加到商店页面和类别页面按钮,显示每种产品的尺寸 . 在主题函数中使用此代码:

function woocommerce_variable_add_to_carts() {

global $product, $post;

$variations = $product->get_available_variations();

$product_sku = $product->get_sku();

$out = '

  • ';

foreach ($variations as $key => $value) {

if (!empty($value['attributes'])) {

foreach ($value['attributes'] as $attr_key => $attr_value) {

$out .= '

';

}

}

}

$out .= '

';

echo $out;

}

add_action('woocommerce_before_shop_loop_item_title', 'woocommerce_variable_add_to_carts');

这个想法是,当用户点击其中一个尺寸按钮时,产品会直接在该页面(商店页面,类别页面)中添加到购物车中 . 我根据提供的答案here制作了一个自定义 endpoints 来解决这个问题 . 我在包含这个的js文件中调用ajax函数:

$('.add_to_cart_button').on('click',function(){

jQuery.ajax({

url: WC_VARIATION_ADD_TO_CART.ajax_url,

type: "POST",

data: {

action : "customAdd_to_cart",

product_id : "697",

variation_id : "707",

quantity : 1,

variation : {

size : "s",

color: "pink"

}

},

success: function(){

alert('Ajax Success ');

}

});

});

(我使用特定的product_id和variation_id进行测试)然后我在主题功能页面添加回调函数,将产品添加到购物车:

function customAddToCart() {

ob_start();

try {

$product_id = apply_filters( 'woocommerce_add_to_cart_product_id', absint( $data['product_id'] ) );

$quantity = empty( $data['quantity'] ) ? 1 : wc_stock_amount( $data['quantity'] );

$variation_id = isset( $data['variation_id'] ) ? absint( $data['variation_id'] ) : '';

$variations = $variation_id ? (array) get_variation_data_from_variation_id( $variation_id ) : null;

$product_status = get_post_status( $product_id );

$passed_validation = apply_filters( 'woocommerce_add_to_cart_validation', true, $product_id, $quantity, $variation_id, $variations, $cart_item_data );

if ( $passed_validation && WC()->cart->add_to_cart( $product_id, $quantity, $variation_id, $variations ) && 'publish' === $product_status ) {

do_action( 'woocommerce_ajax_added_to_cart', $product_id );

$res = getCartFragments();

} else {

$res = array(

'error' => true

);

}

return $res;

} catch (Exception $e) {

return new WP_Error('add_to_cart_error', $e->getMessage(), array('status' => 500));

}

}

add_action( 'wp_ajax_nopriv_woocommerce_add_variation_to_cart', 'customAddToCart' );

所有这一切似乎工作正常,因为在控制台中没有给出任何错误,但问题是未添加选择的产品的变化大小只是添加产品 . 我不知道为什么会这样,我甚至在ajax成功函数中添加一个警报

alert('Ajax Success');

并显示该警报,但它似乎没有按照它应该发送的数据 .

我想知道我在这些代码中缺少什么,或者它可能是js文件和他的位置,或者我需要在上面第一个函数中构建的a>中发送另一个值 . 我尝试了很多东西,但行为仍然相同 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值