jQuery& AJAX:preventDefault on link,运行AJAX请求,然后关注该链接

时间:2016-01-26 13:08:40

标签: php jquery ajax preventdefault

我有这个可能是“简单”的任务,这绝对是在踢我的屁股。

我的目标是当用户点击链接时,我阻止默认,在其上运行ajax函数,然后按照该链接(即恢复默认值)。我唯一可以工作的是捕获链接的href然后使用window.location - 这不是理想的,因为它不会检测用户是否选择在新窗口/选项卡中打开或在相同的窗口/标签;我认为必须有更好的方法。

然而,发生的事情是默认被阻止,运行AJAX函数但不遵循链接。我要问的是:在函数运行后如何模拟链接点击

HTML

<a href="some_href" data-id="789">This is the link</a>

的jQuery

$(document).on('click', 'a', function(e, options){

  // setup our options
  options = options || {};

  // get some details from the link
  var this_href = $(this).attr('href');
  var this_id = $(this).data('id');

  // if options aren't set and this link has a data-id attribute
  if(!options.stuff_done && $(this_id).length){

    e.preventDefault(); // prevent link following

    // run some ajax
    $.ajax({
      url: myAjax.ajax_url,
      type: 'post',
      data: {
        action : 'a_php_function',
        post_id : this_id
      },
      success: function(response) {
        // do stuff
      }).then(function(){
        $(this).trigger('click', { stuff_done: true });
      });

  } else {
    // else if it doesn't have a data-id, do default
  }
});

上下文:使用PHP / AJAX检查值('data-id')是否在数组中,如果是,则删除它。此data-id与Wordpress中的帖子ID相关,需要在用户关注该帖子的链接时删除。

因此 - 用户点击链接,数据ID被检查,删除/不从数组中移除,链接被跟踪。

1 个答案:

答案 0 :(得分:1)

首先给你的href一个这样的ID:

<a href="some_href" data-id="789" id='#some-link'>This is the link</a>

然后在你的ajax成功部分模拟它的点击:

...
success: function(response) {
    $('#some-link').click();
})
...

您可以在触发点击之前检查response。此外,我认为您不需要.then以及所有这些。