2017-08-01 106 views
1

当Ajax调用成功,用户被重定向到主页:如何在成功完成Ajax后按下按钮?

$('#button_1').on('click', function() { 
       //code 
       $.ajax({ 
        method: "POST", 
        url: "/somewhere", 
        data: { 
         //code 
        } 
       }).done(function() { 
         location.href = "/"; 
       });  
      }); 

被重定向后,我想自动点击另一个按钮,打开一个模式。我想里面done功能不同的方法:

.done(function() { 
    location.href = "/"; 
    $('#button_2').click(); // doesn't work 
}); 

.done(function() { 
    location.href = "/"; 
    setTimeout(function() 
     $('#button_2').click(); // doesn't execute 
    }, 2000); 
}); 

.done(function() { 
    location.href = "/"; 
    $(document).ready(function() { 
     // executes but user is immediately redirected to main page 
     $('#button_2').click(); 
    }); 
}); 

我也尝试过阿贾克斯外,在Ajax调用是在功能,但有同样的结果。

如何在Ajax调用之后以编程方式单击该按钮?因为浏览器导航到另一个页面

+0

尝试'成功:'在阿贾克斯 –

+0

属性是'$(“#button_2” )'在'/'页面中? –

+0

如果您将用户重定向到其他页面,则无法在第一页中执行此操作。您必须在第二个(重定向)页面上执行此操作。 –

回答

1

谢谢你的回答。我研究了一点,发现了另一种方式来做到这一点:

$('#button_1').on('click', function() { 
       sessionStorage.setItem("reload", "true"); 
       //code 
       $.ajax({ 
        method: "POST", 
        url: "/somewhere", 
        data: { 
         //code 
        } 
       }).done(function() { 
         location.reload(); 
       });  
      }); 

而且在主要页面:

$(document).ready(function() { 
     var reload = sessionStorage.getItem("reload"); 
     if (reload == "true") { 
      $("#button_2").click(); 
      sessionStorage.setItem("reload", false); 
     } 
    }); 
2

代码旁边

location.href = "/"; 

该线不会被执行。

所以你应该把你的逻辑放在/页面(#button_2应该在那个页面中)。

5

您需要在目标(主)页面中添加该逻辑。

重定向后,当前页面不再是活动页面,并且所有逻辑都被删除。

你可以为了一些参数添加到URL知道什么时候你在那里由于重定向,是这样的:

location.href="/?redirect=1" 

,然后检查参数

+0

我对它的处理方式更容易处理,但对于您的建议+1 + –

2

你目前正在执行重定向后的代码不可能直接执行,因为location.href = "/"之后的代码将永远无法到达。一旦你重新定向你有一个清晰的状态的新页面。

您当前的功能仍然可以是这样的:

$('#button_1').on('click', function() { 
    $.ajax({ 
     method: "POST", 
     url: "/somewhere", 
     data: { 
      //code 
     } 
    }).done(function() { 
      location.href = "/?modal-open=1"; 
    });  
}); 

正如你可以看到我已经添加了一个查询参数重定向,所以我们知道我们的意图开启模式被重定向。

为了您的根页(/),您将需要一个这样的脚本:

$(document).ready(function() { 
    // check the URL for the modal-open parameter we've just added. 
    if(location.search.indexOf('modal-open=1')>=0) { 
     $('#button_2').click(); 
    } 
}); 

这将检查参数是URL,并触发点击。

+0

谢谢+1,祝您有个好的答案。我用我的答案解决了它,因为它更容易处理 –

1

首先当你重定向一个新页面时,你不能访问DOM,因为页面被重新加载。你可以发送一个参数来做到这一点。

$(document).ready(function() { 

    //after page load 

    var isButtonActive = findGetParameter("isButtonActive"); 
    if(isButtonActive){ 
     alert("button_2 activated"); 
     $('#button_2').click(); 
    } 

    $('#button_1').on('click', function() { 
     //code 
     $.ajax({ 
      method: "POST", 
      url: "/somewhere", 
      data: { 
       //code 
      } 
     }).done(function() { 
      alert("page will be reload. button_2 wil be activated"); 
      location.href = "/?isButtonActive=true"; 
     });  
    }); 

    $('#button_2').on('click', function() { 
     alert("button_2 clicked"); 
    }); 

}); 

function findGetParameter(parameterName) { 
    var result = null, 
     tmp = []; 
    location.search 
     .substr(1) 
     .split("&") 
     .forEach(function (item) { 
      tmp = item.split("="); 
      if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]); 
     }); 
    return result; 
} 
相关问题