Вызов AJAX в WordPress Возвращает ошибку 400 в Windows, а не на Mac

#php #jquery #ajax #wordpress #woocommerce

Вопрос:

Я пытаюсь сделать вызов AJAX, чтобы обновить товар в корзине Woocommerce одним нажатием кнопки. На Mac в Chrome запрос всегда выполняется успешно и возвращает переменную даты из моего «предупреждения». В Windows в Chrome запрос завершается с ошибкой 400 каждый раз (и мое предупреждение «Обновление не удалось». показывает).

Скрипт AJAX и HTML для кнопки печатаются из функции PHP. Функция PHP вызывается условно на странице продукта.

Я не ставил в очередь скрипт AJAX, он объявлен встроенным в HTML.

Пожалуйста, помогите выяснить, почему этот запрос не выполняется в Windows в Chrome, но не на Mac в Chrome.

Есть 2 основные функции: одна, которая выводит HTML / JS на страницу для кнопки, другая, которая обновляет корзину.

Функция PHP, которая выводит HTML и JS на страницу:

 
function suggest_pickup_ship_date(){

        //... PHP Code 
        $firstValidDateEpoch = '01-01-2022';
        ?>
        
        <script type="text/javascript">
          var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
        </script>
        <!-- jQuery CDN to run AJAX call -->
        <script
          src="https://code.jquery.com/jquery-3.6.0.min.js"
          integrity="sha256-/xUj 3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
          crossorigin="anonymous"
        ></script>


        <script>
          // AJAX POST to update weekly quantity product dates
          $('.btn_suggested_date').click(function() {
                      loadingPopup.style.display = 'block';
            $.ajax({
              type: "POST",
              url: ajaxurl,
              cache: false,
              data: { 
                date_week: <?php echo $firstValidDateEpoch; ?>,
                action: "update_weekly_quantity_products_dates",
              },
            }).done(function( response ) {
              alert('Response from server: '   response)
              location.reload();
            }).fail(() => {
              loadingPopup.style.display = 'none';
              alert('Update failed.');
            });
          });
        </script>
        <?php 
      }
    }
  }

}
 

Функция PHP, которая обновляет корзину

 // Add action to ajax function that is created from ajax call 
add_action('wp_ajax_update_weekly_quantity_products_dates', 'update_cart_product_weekly_quantity_date');
function update_cart_product_weekly_quantity_date () {  
    if (isset( $_POST['date_week'] )) {

        // $_POST['date_week'] comes to us an an epoch number. We format it to d-m-Y below. 
        $newDate = date('d-m-Y', $_POST['date_week']);
        // Loop through cart items,change date of each 

        $cart_items = [];
        $cart = WC()->cart->get_cart();
        foreach( $cart as $cart_item_key=>$cart_item ) {

            array_push($cart_items, $cart_item_key);

            // **********
            // get cart_item_key of item you want to change
            $cart_item_key_old = $cart_item_key; 

            // retrieve its information
            $cart_item_old = WC()->cart->cart_contents[ $cart_item_key_old ];
            $product_id_old = $cart_item_old['product_id'];
            $quantity_old = $cart_item_old['quantity'];
            $pickup_or_shipping_old = $cart_item_old['custom_data']['pickup_or_shipping'];

            $variation_id = 0;
            $variation_data    = [];
            $custom_data = [
                'custom_data'=> [
                    'pickup_day_of_week' => $newDate, 
                    'pickup_week'=>$newDate, 
                    'pickup_or_shipping' => $pickup_or_shipping_old
                ],
            ];

            // Add new item
            WC()->cart->add_to_cart($product_id_old, $quantity_old, $variation_id, $variation_data, $custom_data);

            // delete the old item
            WC()->cart->remove_cart_item($cart_item_key_old);

        }
        wp_die('new date '. $newDate ); 
    }
    $formattedDate = date('D, M j Y', strtotime($newDate));
    // Exit and return response message to frontend  
    echo 'hi';
    die('Dates updated to '. $formattedDate. '  cart items:' . var_dump($cart_items));
}