jQuery Ajax表单 - 如何获取重定向URL?

5
我正在使用ajax form jquery插件通过ajax提交表单(在对话框中)。这个过程一切正常,然后我从服务器获得了html响应。该响应来自于一个标准的重定向后的php页面,我无法修改它。
有没有办法使用jquery(在ajax回调函数内部)获取此重定向的url(即最终GET位置)?
  $j('span.sfAutocomplete a').click(function(e){
    var url = this.href;
    var $dialog = $j('<div id="ajaxDialog"></div>').appendTo('body')
    .load(
      url,
      'sfAutocomplete=true',
      function (responseText, textStatus, XMLHttpRequest) {
        $dialog.dialog({ autoOpen: true });
        //
        //  Ajax submit
        //
        $j('#ajaxDialog form').submit(function() {
          function showResponse(responseText, statusText) {

             // how to get the redirect url ?

          }
          $j(this).ajaxSubmit({
            success: showResponse
          });
          return false; 
        }); 
      }
    );
    return false;
  });
1个回答

3

我没有使用你正在使用的插件,但如果你使用jQuery Ajax命令,你将在complete事件的参数中收到XMLHttpRequest对象。然后,你可以从返回的HTTP头中获取发布URL。请尝试以下操作:

$.ajax({
  url:'your.url',
  data:'your data',
  complete: function(xhr,textstatus) {
    // xhr.responseText contains the response from the server
    var allheaders = xhr.getAllResponseHeaders();
    // this will get all headers as a string - if you want them as an object...
    var eachheader = allheaders.split('\n');
    var headers = {};
    for(i = 0; i < eachheader.length; i++) {
        if ($.trim(eachheader[i]) !== '') {
            headersplit = eachheader[i].split(':');
            headers[headersplit[0]]=$.trim(headersplit[1]);
        }
    }
  }
});

这段代码是从这个帖子中复制而来的。


我已经尝试使用complete处理程序+xhr.getResponseHeader或getAllResponseHeaders,但它返回“未定义”。如果我执行console.log(xhr),它会打印:Object aborted=0(即使连接正常)。 - gpilotino
奇怪。那么xhr对象包含什么? - Traveling Tech Guy
看起来这是ajax表单插件的“bug”,当与“iframe”选项一起使用时(它使用xhr模拟对象)。一旦去掉该选项,现在我得到了正确的http头文件,但是“Location”头文件丢失,所以我仍然无法获得URL。 - gpilotino
从post操作返回的页面有什么特别之处吗?它是否主动操纵HTTP头部?(例如添加cookie,更改内容类型等)? - Traveling Tech Guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接