Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获得;地点“;带有jQuery'的标题;s$。邮政功能?_Jquery_Post_Header_Location - Fatal编程技术网

如何获得;地点“;带有jQuery'的标题;s$。邮政功能?

如何获得;地点“;带有jQuery'的标题;s$。邮政功能?,jquery,post,header,location,Jquery,Post,Header,Location,我正在尝试创建一个可以处理表单的弹出框(使用jQuery),在大多数情况下,我都可以使用它。我遇到的唯一问题是,在成功登录和/或注册时,PHP会发送一个头位置以重定向到用户的“主页”,并在我加载表单的div中创建一个无休止的重定向循环 如果post请求中发送了位置头,那么如何读取,然后获取作为新位置发送的实际URL 这是我迄今为止尝试过的(除其他外): 我不确定我到底做错了什么,但据我所知,沿着这条路线应该是可行的。我还尝试使用一个简单的AJAX post请求来实现这一点,但没有得到预期的结果

我正在尝试创建一个可以处理表单的弹出框(使用jQuery),在大多数情况下,我都可以使用它。我遇到的唯一问题是,在成功登录和/或注册时,PHP会发送一个头位置以重定向到用户的“主页”,并在我加载表单的div中创建一个无休止的重定向循环

如果post请求中发送了
位置
头,那么如何读取,然后获取作为新
位置
发送的实际URL

这是我迄今为止尝试过的(除其他外):

我不确定我到底做错了什么,但据我所知,沿着这条路线应该是可行的。我还尝试使用一个简单的AJAX post请求来实现这一点,但没有得到预期的结果

只需注意,不会总是发送位置标头;只有当某人成功登录、注册等时

理想情况下,这就是我试图实现的目标:

$('.register').live('submit', function(e) {

    e.preventDefault();

    var form_data = $(this).serialize() + '&register=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;

        }

    });

});

据我所知,您实际上无法读取
位置
标题,因为JavaScript会跟随它直到它们停止,然后将
标题
发送回,这意味着我获取的是目标页面的标题,而不是最初发布到的页面

因此,我编辑了PHP脚本中的重定向函数,以便在使用JavaScript(或jQuery)请求页面时发送自定义标题

这样我就可以读取a重定向是否真的被发送,并在JavaScript(jQuery)端正确处理它

以下是最终结果:

$('.popup').on('submit', '.register', function(e) {

    e.preventDefault();

    var action = $(this).attr('action'), form_data = $(this).serialize() + '&register=register&js=true';

    $.post(action, form_data, function(data, text, xhr) {

        var header_location = xhr.getResponseHeader('Redirect');

        if(header_location == null) {

            $('.overlay_container').html(data);

        }else{

            window.location = header_location;

        }

    });

});

您应该避免始终使用
jQuery.live()
!使用
.on()
。如果您的jQuery版本中没有
.on()
,请使用
.delegate()。我正在使用谷歌CDN的1.7.1版本。据我所知,它应该包含在那里(从1.7开始),但它无法工作
.on()
是从1.7版开始包含的,它肯定可以工作。此外,
.on()
可以完全取代
.live()
.delegate()
,它优于它们,并且意味着取代它们。您似乎使用不正确,或者犯了其他错误。如果我错了,请纠正我,但我是否可以将
.live()
替换为
.on()
?我试图在通过
.load()
加载的HTML上使用此函数。奇怪的是,当我执行上面所述的操作时,它不起作用,而as
.live()
确实起作用。是的,您肯定应该将
.live()
替换为
.on()
,但要正确地执行(正如我上面提到的)。当涉及到您的问题时,是否执行了成功回调?换句话说:
var header\u location=…
部分是否由脚本访问?我相信没有,但请确认或否认。根据我的经验,任何带有位置标题的内容都不会被浏览器自动跟随。我只是做了一个测试,得到了第一级的回复。
public function redirect($redirect = NULL) {

    global $_CONFIG;

    if($_POST['js'] == 'true') {

        exit(header('Redirect: ' . $_CONFIG['site']['path'] . '/' . $redirect));

    }else{

        exit(header('Location: ' . $_CONFIG['site']['path'] . '/' . $redirect));

    }

}
$('.popup').on('submit', '.register', function(e) {

    e.preventDefault();

    var action = $(this).attr('action'), form_data = $(this).serialize() + '&register=register&js=true';

    $.post(action, form_data, function(data, text, xhr) {

        var header_location = xhr.getResponseHeader('Redirect');

        if(header_location == null) {

            $('.overlay_container').html(data);

        }else{

            window.location = header_location;

        }

    });

});