Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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
Php jqueryajax重定向问题 请考虑这一点:在A页,当JS关闭时,我有一个链接把你带到B页面,但是当JS打开时,我想用页面B. 替换当前页面上的内容。_Php_Jquery_Ajax_Redirect - Fatal编程技术网

Php jqueryajax重定向问题 请考虑这一点:在A页,当JS关闭时,我有一个链接把你带到B页面,但是当JS打开时,我想用页面B. 替换当前页面上的内容。

Php jqueryajax重定向问题 请考虑这一点:在A页,当JS关闭时,我有一个链接把你带到B页面,但是当JS打开时,我想用页面B. 替换当前页面上的内容。,php,jquery,ajax,redirect,Php,Jquery,Ajax,Redirect,页面A和B实际上是同一个脚本,能够区分AJAX调用和常规调用,并适当地提供内容。只要不涉及重定向,一切正常 但是,有时会出现301重定向,而客户端浏览器会发出第二个请求,然后返回200 OK。只有第二个请求发送时没有X-request-With头,因此我无法在脚本中判断它是否来自AJAX,并且将发送一个完整的页面,而不仅仅是内容 我曾尝试在我的错误、成功和完整处理程序中检查301状态代码,但都不起作用。它似乎在幕后处理301 有人能帮我吗 jQuery1.4,PHP5 编辑:人们要求提供此代码,

页面A和B实际上是同一个脚本,能够区分AJAX调用和常规调用,并适当地提供内容。只要不涉及重定向,一切正常

但是,有时会出现301重定向,而客户端浏览器会发出第二个请求,然后返回200 OK。只有第二个请求发送时没有X-request-With头,因此我无法在脚本中判断它是否来自AJAX,并且将发送一个完整的页面,而不仅仅是内容

我曾尝试在我的错误、成功和完整处理程序中检查301状态代码,但都不起作用。它似乎在幕后处理301

有人能帮我吗

jQuery1.4,PHP5

编辑:人们要求提供此代码,我认为这不是必需的,但下面是:

// hook up menu ajax loading
$('#menu a').live("click", function(){
    // update menu highlight
    if($(this).parents('#menu').size() > 0){
        $("#menu>li").removeClass("current_page_item");
        $(this).parent().addClass("current_page_item");
    }
    // get the URL where we will be retrieving content from 
    var url = $(this).attr('href');

    window.location.hash = hash = url;

    $.ajax({
        type: "GET",
        url: url,
        success: function(data){
            // search for an ID that is only present if page is requested directly 
            if($(data).find('#maincontent').size() > 0){
                data = $(data).find('#maincontent .content-slide *').get();
            }
            // the rest is just animating the content into view
            $("#scroller").html(data);
            $('.content-slide').each(setHeight);

            $('.content-slide').animate({
                    left: "0px"
                }, 1000, 'easeOutQuart', 
                function(){
                    $('#home').css("left", "-760px").html(data);
                    $('#scroller').css("left", "-760px");
                    $('.content-slide').each(setHeight);
                }
            );
        }
    });

    return false;
});

由于重定向后没有正确地传递头,因此一个好的选择似乎是允许一个查询字符串变量来指示请求的isAjax状态以及x-request-with头。因此,如果301重定向是由.htaccess文件生成的,则重定向时只需将查询字符串参数传递到新路径。例如:

RewriteEngine on
RewriteRule pageB.php$ pageC.php?%{QUERY_STRING} [L,R=301]

因此,您对pageB.php?isAjax=1的请求将是pageC.php?isAjax=1,从而产生来自服务器的正确格式的响应。

由于您使用直接访问和AJAX加载pageB,我通常将简单的if放入这样的页面。 页面B将如下所示:

<?php $is_ajax = ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'); ?>
<?php if ( ! $is_ajax ): ?>
<html>
<!-- full page content for direct access -->
<?php endif; ?>
<!-- page content that for AJAX request and direct access -->
<div id="maincontent">
<!-- content here -->
</div>
<!-- end of page content that for AJAX request and direct access -->
<?php if ( ! $is_ajax ): ?>
<!-- rest of page content -->
</html>
<?php endif; ?>
这样,我就不需要从AJAX请求中过滤响应数据

我有一个问题要问你。这个代码做什么

window.location.hash = hash = url;
也许这就是导致这种奇怪的重定向的原因


如果您仍然遇到奇怪的重定向,使用Firebug进行调试并查看apache日志可能会帮助您找到错误源。

您可以将假定位于B页的内容放入
标记中,如果Javascript实际上处于活动状态,则可以进行AJAX调用。不涉及任何链接…谢谢,但这不是一个选项,页面上几乎每个链接都将使用AJAX处理,an将下载页面的完整内容。您能提供页面A和页面B的结构吗?您希望B页内容显示在A页内,还是替换A页中的所有当前内容?为什么用户必须先转到A页,有什么原因吗?我想用B中相应的部分替换A的部分。我通过搜索要显示的ID的响应并提取它们,解决了我的问题。这是丑陋的,但它的工作,现在我只是在寻找一个更好的解决方案。再次,请张贴您的代码,这样我可以帮助您。看,这是一个问题。整个事情应该是一个Wordpress主题,所以我不能真正编辑.htaccess。我需要一种在JS或PHP中实现这一点的方法……根据生成301的原因,我可以想象Wordpress可以传递查询字符串参数,就像.htaccess在那里剪掉它一样。唯一的额外警告是,您需要配置Wordpress将isAjax查询字符串变量解释为AJAX请求的有效标识符,我相信这是可能的。谢谢您的回答,但我已经这么做了,这正是问题所在,对服务器/服务器上的请求会导致重定向,浏览器依次以正确的URL重新加载页面,但无法发送http_x_请求的_,这就是为什么您建议和我使用的解决方案不起作用的原因。window.location.hash=url作为历史记录的基础,并且通过电子邮件发送当前url的能力是服务器中的所有AJAX请求都没有
HTTP\u X\u REQUESTED\u和
或者只有a页和B页中的代码?也许为了解决这个问题,您可以在请求页面B时传递一个参数:
$.get('pageB',{'partial':1},函数(数据){//process}),但这仅适用于临时修复。不要依赖它。
window.location.hash = hash = url;