javascript - 找出 Jquery ajax 请求被重定向到的位置

标签 javascript jquery ajax redirect

所以-我有这个ajax请求,看-。金发女郎,大约 6 英尺高,看起来像这样:

$.ajax({
    url: 'http://example.com/makeThing',
    dataType: 'html',
    type: 'POST',
    data: {
        something:someotherthing
    },
    complete: function(request, status) {
        console.log("headers=" + request.getAllResponseHeaders(););
    }
});

发生的情况是对“/makeThing”的请求返回一个 302 重定向到第二个 url:“getThing/abc123”。我想要做的就是找出第二个 url 是什么(以编程方式 - 每次都会不同,所以只检查 firebug 对我没有帮助)。我已经尝试将返回到“完成”回调的响应 header 连接起来,但这只给了我第二个请求返回的内容。

约束: - 我无法控制正在运行的服务器 - 只有 js。 - 必要时可以切换框架(dojo?原型(prototype)?)

理想情况下,我会对/makeThing 执行某种仅 header 请求,以通过仅获取初始 302 响应的 header 来找出重定向 url 是什么。

如果失败(因为 jquery 自动跟随重定向并且似乎没有办法在请求之间介入),我会检索最终响应并使用它以某种方式从...获取 url 什么?也许是请求对象?

TLDR:发送 ajax 请求。框架自动遵循生成的 302 重定向。我如何找出它重定向到的位置?

编辑,澄清: 最终 url 每次都会不同 - 调用“makeThing”会导致服务器创建此后托管在“getThing/abc123”的内容

最佳答案

如果可能,让您的服务器在这些页面(目标页面,而不是重定向页面)上设置标题,例如设置 "current-location" 标题,然后您可以这样做:

$.ajax({
    url: 'http://example.com/makeThing',
    dataType: 'html',
    type: 'POST',
    data: {
        something:someotherthing
    },
    complete: function(request, status) {
        var location = request.getResponseHeader("current-location");
    }
});

是的,这有点老套,但由于重定向是在 XmlHttpRequest 对象(您无法访问的事件)内部处理的,因此您没有太多选择。

You can check the spec ,这是 XmlHttpRequest 的预期行为:

If the origin of the URL conveyed by the Location header is same origin with the XMLHttpRequest origin and the redirect does not violate infinite loop precautions, transparently follow the redirect while observing the same-origin request event rules.

关于javascript - 找出 Jquery ajax 请求被重定向到的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3200187/

相关文章:

javascript - Vue.js:在 laravel 公共(public)文件夹中显示个人资料图片

javascript - 如何从 Javascript 中的自定义属性获取元素?

javascript - bootstrap *slide.bs.carousel* 事件未在 vue js 中触发

javascript - 如何将 reCAPTCHA 添加到表单

javascript - 在 react/redux 应用程序(代理)中隐藏 api url

javascript - 在函数内部修改变量后,为什么变量未更改? -异步代码引用

php - Yii CGridview 分页 renderpartial

javascript - 获取用户编辑的文本区域的内容

javascript - 服务器端数据表处理中的ajax调用问题

javascript - Ajax 使用函数每 x 秒获取 php 数据