• Resolved mathisdoret

    (@mathisdoret)


    We are currently developing a custom made theme from scratch.

    However, when trying to debug Ajax queries, we found an issue that we have not been able to investigate much further:

    Running any Ajax query if the login cookies are set returns an error 400.

    But if we remove the login cookies, the queries no longer return the error 400.

    This is the (simplified) code JS side:

    
    jQuery.ajax({
            url: my_ajax_object.ajaxurl,
            type: 'POST',
            data: {
                action: 'shop-query',
                queryParams: JSON.stringify(params)
            },
            accept:'application/json',
            cache: false,
            contentType : 'application/x-www-form-urlencoded; charset=UTF-8',
            success: response =>{/*Modify page*/},
            error: (xhr, textStatus, error) => {
                console.log(error);
            }
        });
    

    This is the code which is called php side:

    
    if (!isset($_POST["queryParams"])) wp_send_json_error("No query params provided");
    $queryParams = json_decode(stripslashes($_POST["queryParams"]), true);
    
    $products = queryPosts::shopQuery($queryParams);
    
    $page = $queryParams['page'] ?? 1;
    $total = $queryParams['total'] ?? 9;
    
    $startIndex = ($page - 1) * $total;
    $endIndex = $startIndex + $total;
    if ($startIndex === $endIndex) $endIndex = $startIndex + 1;
    
    $min_max = getMinAndMaxPrice($products);
    
    ob_start();
    for ($i = $startIndex; $i < $endIndex; $i++) {
        if (!isset($products[$i])) break;
        get_template_part('woocommerce/content', 'product', array(
            'product' => $products[$i]
        ));
    }
    
    wp_send_json_success(array(
        'html' => ob_get_clean(),
        'found_total' => count($products),
        'min' => $min_max['min'],
        'max' => $min_max['max']
    ));
    

    The add_action call is situated at the end of the functions.php file, and moving it does not seem to resolve this issue.

    As stated above, when no login cookie is set, the query has no issue, which is not an issue I was able to find anywhere else.

    I thank you for the help you might be able to provide, this has been quite the headache.

    EDIT: echo-ing the $_POST parameters prints them alongside the 0 of the error 400, but echo-ing inside the callback does nothing, the parameters are received but the php callback is never called.

    EDIT 2: Turns out all I needed to do was add a normal add action bellow the nopriv add action… Not deleting this thread in case anyone runs into the same problem.

    • This topic was modified 2 years, 3 months ago by mathisdoret.
    • This topic was modified 2 years, 3 months ago by mathisdoret.
    • This topic was modified 2 years, 3 months ago by mathisdoret.
Viewing 1 replies (of 1 total)
  • fyi

    In WordPress, the nopriv parameter of the add_action function specifies that the action should be executed for users who are not logged in. So, if you add an additional add_action call without the nopriv parameter, it will be executed for both logged-in and logged-out users.

    It’s worth noting that the nopriv parameter is usually used in conjunction with the wp_ajax_nopriv_ prefix, which specifies that the action should be triggered when an Ajax request is made by a logged-out user. The wp_ajax_ prefix, on the other hand, specifies that the action should be triggered when an Ajax request is made by a logged-in user.

Viewing 1 replies (of 1 total)
  • The topic ‘Ajax querry returns error 400 but only when user is logged in’ is closed to new replies.