【发布时间】:2012-02-23 16:13:31
【问题描述】:
我正在尝试创建一个可以处理表单的弹出框(使用 jQuery),并且在大多数情况下,我都可以正常工作。我唯一遇到的问题是,在成功登录和/或注册时,PHP 会发送一个标头位置以将用户重定向到他们的“家”,并在我加载表单的 div 中创建一个无限循环的重定向.
如果在 post 请求中发送了 location 标头,我将如何阅读,然后获取作为新 location 发送的实际 URL?
这是我迄今为止尝试过的(除其他外):
$('.register').live('submit', function(e) {
e.preventDefault();
var form_data = $(this).serialize() + '®ister=register&js=true';
$.post(site_path + '/register', form_data, function(data, text, xhr) {
alert(xhr.getResponseHeader("Location"));
// $('.overlay_container').html(data);
});
});
不确定我到底做错了什么,但据我所知,这些方面的东西应该可以工作。我还尝试使用普通的 AJAX 发布请求来执行此操作,但没有预期结果。
请注意,不会总是发送位置标头;只有当有人成功登录、注册等时。
理想情况下,这就是我想要实现的目标:
$('.register').live('submit', function(e) {
e.preventDefault();
var form_data = $(this).serialize() + '®ister=register&js=true';
$.post(site_path + '/register', form_data, function(data, text, xhr) {
var header_location = xhr.getResponseHeader("Location");
if(header_location == null) {
$('.overlay_container').html(data);
}else{
window.location = header_location;
}
});
});
【问题讨论】:
-
您应该始终避免使用
jQuery.live()!使用.on()。如果.on()在您的jQuery 版本中不可用,请使用.delegate()。 -
@Tadeck 最初我曾尝试使用
.on(),但它似乎不起作用。我正在使用 Google CDN 的 1.7.1。据我所知,它应该包含在其中(从 1.7 开始),但它无法工作。 ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js -
.on()自 1.7 起包含,它确实有效。此外,.on()可以完全替代.live()和.delegate(),优于它们并且意在替代它们。看来您使用不正确或犯了其他错误。 -
如果我错了,请纠正我,但我不会用
.on()替换.live()吗?我正在尝试在通过.load()加载的 HTML 上使用此功能。奇怪的是,当我执行上述操作时它不起作用,而.live()确实起作用。 -
是的,您绝对应该将
.live()替换为.on(),但要正确操作(如上所述)。当涉及到您的问题时,是否执行了成功回调?换句话说:您的脚本是否到达了var header_location = ...部分?我相信不是,但请确认或否认。
标签: jquery post header location