WP AJAX请求没有堆叠?

时间:2020-09-13 作者:Neil Hillman

我的ajax请求单独工作(如果我等待每个请求返回,然后再提交下一个请求),但是如果我同时提交一组请求(例如单击多个按钮),则只有最后一个操作返回响应。就像每个请求都在覆盖/取消前一个请求一样。

我正在使用WP的管理ajax。php,例如:

<?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>\';
?>
(我在一个页面上有几个具有不同post-id的,但nonce只设置一次,并且对于整个页面都是相同的)。

然后一些JS如下:

$(".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;
});
。。。以及如下接收功能:

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();
}
如果只单击1个链接并等待其返回,则一切正常;“成功”;,然后单击“下一步”,但如果单击“多个”;添加项目;同时,只有最后一个链接返回成功消息。

我错过了什么?感谢您抽出时间。。。

1 个回复
最合适的回答,由SO网友:Neil Hillman 整理而成

@上面Rup的评论引导我找到了答案;我的wp-ajax请求运行正常,但我对jquery的$(this)选择器的不完全理解意味着我每次都是针对最后一个点击的项目,并给出了成功响应。现在可以结束此问题。

相关推荐

在允许另一个AJAX调用之前确保函数已完成

我正在使用ajax函数更新保存在用户元字段中的数组。添加到数组中的值取自标记中的数据属性,这些属性也在触发时起作用,以进行ajax调用。虽然该函数95%的时间都在工作,但无论值是否保存,都可能有点碰运气。我怀疑这是因为用户可以太快地启动这些ajax调用,而没有足够的时间让原始函数调用保存和更新元字段。在允许该函数再次运行之前,确保ajax触发的更新元字段值的功能已完成的最佳方法是什么?希望这是有意义的-不用说,请让我知道如果你需要任何更多的信息。提前谢谢!!Sample HTML<div id=&q