1

我遇到了一个带有重定向的http请求问题。就像这样:如何在重定向之前保持请求已完成

有网页A上的按钮,如果你按一下按钮,它会触发:

  1. 发送多个HTTP请求到远程服务器
  2. 重定向记住这个click事件到页面乙

问题是: 事件N.1上面还没有完成,但是页面A已经重定向到网页B


我试图在Chrome中测试这种行为,它显示了上述事件N.1的所有http请求的状态200。但是在Firefox中,我试图用firebug进行调试,并选择persist选项来保留网络中的所有请求,但列表中没有请求。

所以我有两个

  1. 的Firefox的配置是不正确的
  2. 放入系统在Chrome请求只是 “碰巧” 说完,好运气。

请有人可以给我一些提示或答案弄清楚吗?谢谢

+0

所以你想在所有的http请求返回后重定向? – chchrist

+0

@chchrist是!但我也担心它会使页面B“加载”得太慢 –

+0

如果您不构建单页面应用程序,您可以只加载部分页面而无需重定向,那么这总是一个问题... – chchrist

回答

0

你应该callbacks工作(这些功能,当事情结束时触发 - 一个HTTP请求在这种情况下) 如果你使用jQuery,你可以使用此代码:

$.ajax(
    { 
     type:'GET', 
     url:'/someurl', 
     data:"someData=12345&someOtherData=foo", 
     success: function(data){ 
     // do something - for instance your second http request 
     }, 
     error : function(data){ 
     //something didnt went quite well 
     } 
    } 
); 

当你不使用jQuery,this function可能会派上用场(如果你想在第一个例子中添加类似的数据,你必须查询字符串添加到URL参数):

function callAjax(url, callback){ 
    var xmlhttp; 
    // compatible with IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function(){ 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200){ 
      callback(xmlhttp.responseText); 
     } 
    } 
    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 
} 

您可以交叉的地方CAL直到你进入最后的重定向呼叫。但要注意,你不希望在callback hell

+0

感谢您的回复!我喜欢你的答案,但它不适合我的情况:我想改进发送事件N.1的请求的代码,而不改变重定向的代码。 –

0

我建议你Promises.alljquery.when

工作,防止click事件冒泡,然后发出Ajax请求,并将它们传递作为承诺的数组结束。

+0

谢谢您的回复!不幸的是,代码中没有使用两个。 –

+0

然后你回调的解释在其他答案,但要注意厄运https://en.wikipedia金字塔。组织/维基/ Pyramid_of_doom_(编程) – chchrist

相关问题