如何执行顺序的ajax调用?

时间:2018-11-07 15:16:08

标签: javascript jquery ajax promise

我有一个按钮www.first.com,一旦单击它,它就会重定向到URL www.second.com。该URL的响应www.first.com中包含另一个URL。我使用ajax调用拦截请求,而不是重定向到www.second.com,而是重定向到document.getElementById("button1").addEventListener("click", function (e) { e.preventDefault(); $.ajax({ url: 'http://www.first.com', method: 'GET', crossDomain : true, success: function(response){ //here I am redirected to www.second.com window.location.href = response; } }); }); 。以下代码可以正常工作,并且可以完成我期望的工作:

www.second.com

我想执行另一个ajax请求-将页面www.third.com的真实性重定向到www.third2.com。我不想对url做一些简单的字符串操作(假设我想将其更改为www.third2.com),然后直接重定向到success: function(response){ $.ajax({ url: response, method: 'GET', crossDomain : true, xhrFields: { withCredentials: false }, success: function(result2){ //it does not redirect to `google.com`; it still redirects to `www.second.com` result2 = "https://www.google.com/"; window.location.href = result2; alert("This alert does not show"); } }); //maybe I have to remove this line? window.location.href = response; }, 。我怎么做?我猜我需要另一个ajax调用,但是我不知道如何在完成第一个ajax调用后按顺序运行。

发布到目前为止我已尝试过的内容以及未成功的内容:

{{1}}

2 个答案:

答案 0 :(得分:0)

您可以在第一个请求回调中简单地发出另一个ajax请求,如下所示:

document.getElementById("button1").addEventListener("click", function (e) {
  e.preventDefault();
  $.ajax({
    url: 'http://www.first.com',
    method: 'GET',
    crossDomain : true,
    xhrFields: {
      withCredentials: false
    },
    success: function(response){
      $.ajax({
        url: response,
        method: 'GET',
        crossDomain: true,
        xhrFields: {
          withCredentials: false
        }
      },
      success: function(response2){
        window.location.href = response2;
      });
    }
  });
});

虽然不是很漂亮,但是您可以使用promises获得更清晰的代码。

答案 1 :(得分:0)

为澄清起见,您没有拦截重定向。单击按钮即可发出出站请求。我只是指出这一点,以便我们说相同的语言。因为一旦获得辅助URL,您就将重定向到该位置。

因此,您的答案取决于您实际要完成的工作。如果您只是想使用返回的URL并对其发出另一个AJAX请求(并对其进行操作,重定向至它,或同时对两者进行嵌套),只需将辅助请求嵌套在您的success函数中。

但是,如果您想重定向到第二个位置,然后发出后续请求,则更为复杂。您必须确保由第二个URL表示的页面具有一个加载方法,该方法可以发出另一个AJAX请求或页面重定向,无论您要完成什么。设置window.location.href后(获得第二个URL),浏览器将尝试重定向。任何页面上的卸载事件都将是不可靠的,从浏览器到浏览器(以我的经验)。