WP ajax requests not stacking?

Question

I managed to get Ajax requests working using WP’s admin-ajax.php, like so:

<?php
$nonce = wp_create_nonce("my_nonce");
$link = admin_url('admin-ajax.php?action=add_item&post_id='.$post->ID.'&nonce='.$nonce);
echo '<a class="add_item" data-action="add_item" data-nonce="' . $nonce . '" data-post_id="' . $post->ID . '" href="' . $link . '">add item</a>';
?>

and then some JS like this:

$(".prod_btns a").click(function(e) {
    e.preventDefault(); 
    var action = $(this).data("action");
    var post_id = $(this).data("post_id");
    var nonce = $(this).data("nonce");

    $.ajax({
        type : "post",
        dataType : "json",
        url : myAjax.ajaxurl,
        data : {action: action, post_id : post_id, nonce: nonce},
        success: function(response) {
            if(response.type == "success") {

                alert( "success" );

            } else {
                alert( "fail" );
            }
        }
    });
    return false;
});

… and a receiving function like so:

add_action( 'wp_ajax_add_item', 'add_item_funct');
function add_item_funct() {
  if ( !wp_verify_nonce( $_REQUEST['nonce'], 'my_nonce' ) ) {
    exit( "Ajax authentication failed!" );
  }
  // do some stuff...

  $result['type'] = "success";

  if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    $result = json_encode($result);
    echo $result;
  } else {
    header("Location: ".$_SERVER["HTTP_REFERER"]);
  }
  die();
}

This all works fine until I clicked multiple “add” buttons simultaneously, and only the last one returned a success message?

As long as I click only 1 button and wait for it to return “success” it works, but if I click a second button before the first has returned, it seems to cancel out the previous request instead of carrying it out asynchronously?

What am I missing? Thanks for taking the time…

0
Neil Hillman 4 months 0 Answers 26 views 0

Leave an answer