我有一个按钮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}}
答案 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),浏览器将尝试重定向。任何页面上的卸载事件都将是不可靠的,从浏览器到浏览器(以我的经验)。