jQuery AJAX Yönlendirme sorun

2 Cevap php

Bu düşünün lütfen: sayfa AI Açık JS kapalı olduğunda, sayfa B götüren bir bağlantı var, ama JS olduğunda, ben sayfa B. içeriği ile geçerli sayfadaki içeriği değiştirmek istiyor

Sayfalar A ve B aslında AJAX normal olanlardan çağırır anlatmak ve uygun içerik sunmak yapabiliyor aynı komut dosyası vardır. Herşey sürece dahil hiçbir yönlendirmenin olduğu gibi, gayet iyi çalışıyor.

Ama, bazen bir 301 yönlendirme ve ne oluyor gibi görünüyor istemci tarayıcı sonra bir 200 OK ile dönecektir ikinci bir istek yapar olmasıdır. Sadece ikinci isteği, AJAX ya geldi wether nedenle benim komut dosyası içinde söyleyemem, sadece içeriğin yerine tam bir sayfa göndermek, bir X-istenen-ile başlığı olmadan gönderilir.

Ben hata, başarı ve tam işleyicileri 301 durum kodu için denetimi denedim ama bunların hiçbiri çalıştı. Bu perde arkasında 301 işleme gibi görünüyor.

Herkes bu konuda bana yardımcı olabilir mi?

jQuery 1.4, PHP 5

Edit: İnsanlar gerekli olduğunu ama buraya düşünmüyordu, bu kodu istedi:

// 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;
});

2 Cevap

Nedeniyle başlıkları yönlendirmenin düzgün sonra geçirilen olmadığını aslında, bu bir istek isAjax durumunu gösteren yanı sıra başlığında x-istenen-ile bir sorgu dizesi değişken için izin vermek olacağını iyi bir seçenek gibi görünüyor . Senin 301 yönlendirmeleri bir. Htaccess dosyası tarafından oluşturulan ediliyor Yani, sadece yönlendirme yaparken yeni yola sorgu dizesi argümanlarını aktarması gerekiyordu. Örneğin:

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

Yani pageB.php isteğiniz? IsAjax = 1 pageC.php olacak? IsAjax = 1, sunucudan düzgün biçimlendirilmiş yanıt sonuçlanır.

Since you load pageB with either direct access and using AJAX, I usually put the simple if in page like that. Page B will looks like this:

<?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; ?>

Sonra jQuery kod sadece sayfasını almak ve scroller eklemek, kontrol yapmak gerekmez.

//I prefer just user $.get
$.get(url, {}, 
  function(data){
    // the rest is just animating the content into view
    $("#scroller").html(data);
    //...
  });

Bu grubu, AJAX isteği yanıt verileri süzmek gerekmez.

Sana bir sorum var. Bu kodu ne?

window.location.hash = hash = url;

Belki garip yönlendirmeyi neden ne olduğunu.

Hala Firebug kullanarak garip yönlendirme, hata ayıklama deneyim ve görürseniz apache günlüğü hata kaynağını bulmaya yardımcı olabilir.