2009-03-25 16 views
0

Ich muss einen Ajax-Anruf umleiten, ohne den Client wissen zu lassen.Redirect in Ajax Anruf

getPage.php ist eine Anwendung, die HTML etc. für eine bestimmte Abfrage zurückgibt.

getPage.php? Hash = interessant-Artikel-Titel und getPage.php? Page = 3 kehrt gleich.

Um den Client aus, die in der Cache beides vermeiden würde ich getPage.php? Hash = interessant-Artikel-Titel Umleiten zu getPage.php? Page = 3 über PHP-Header 301 und den Ort mag.

Ich versuchte dies und es gibt nichts zurück. Der Ajax-Anruf scheint nicht umgeleitet werden zu wollen.

Hat jemand eine Idee, was könnte dieses Doppel-Cache-Problem lösen?

Ich möchte 301 Redirects verwenden, weil sie zwischenspeicherbar sind. Auf diese Weise ruft der Browser automatisch page = 3 an, wenn er aufgefordert wird, hash = inseresting-article-title abzurufen.

Code-Beispiele:

function handleInit(event) { 
     if (event.path != "/") { 
      var hash = event.path.replace(/\//,"").replace(/\?/g,""); 
      getPage(hash); 
      currentState.hash = hash; 
     } else { 
      currentState.id = 1; 
     } 
     SWFAddress.addEventListener(SWFAddressEvent.CHANGE, handleChange); 
    } 


    function chapter_forward() { 
     if (!freeze) { 
      freeze = true; 
      getPage(currentState.id - 1); 
     } 
    } 


    function ajax_data(id) { 
     return typeof(id) == "string" ? "hash=" : "page="; 
    } 

    function getPage(id) { 
     $.ajax({ 
      method: "get", 
      url: getPage.php, 
      data: ajax_data(id) + id.toString(), 
      dataType: 'json', 
      timeout: 2000, 
      error: function() { 
       $("#space-3").html('40104 - Request Timeout'); 
      }, 
      complete: function() {}, 
      success: function(result) { 
       handleContent(result); 
      } 
     }); 
    } 

Der Grund, warum ich die Umleitung brauchen, ist zu geschehen, weil ich die ID von einem HASH erhalten, wenn der Benutzer seinen Rücken verwendet und her Browser-Schaltflächen.

Wenn der Benutzer einfach hin und her navigiert, füge ich einfach +1 zur aktuellen ID hinzu.

getPage.php gibt so etwas wie dieses:

{"article_id":"3","hash":"music-in-your-ear","title":"Music in your ear.","html":"Blah blah article 3","modified":"Fri, 20 Mar 2009 02:46:00 GMT"} 

Dank!

+0

Wo verwenden Sie den Ajax? Rufen Sie Ajax innerhalb Ihrer Seite an, um die nächste Seite zu laden, oder versuchen Sie, Ajax zum Umleiten zu verwenden? Hast du einen Beispielcode? –

+0

Können Sie einige Codebeispiele bereitstellen? –

+0

Ich habe die Frage aktualisiert. – Willem

Antwort

1

Wenn Sie this answer betrachten, ist das korrekte Verhalten für Browser, URLs nicht mit Abfrageparametern zu cachen.

Ich weiß nicht, ob 301 Redirect sogar funktioniert, wenn Sie grundsätzlich auf die gleiche URL zugreifen.

Ich schlage vor, Sie gehen durch Ihren Code und verwenden nur einen dieser Links, wenn sie das gleiche zurückgeben.

+0

Ich würde wirklich nicht beide verwenden, wenn es nicht notwendig war. – Willem

1

Wenn Sie Apache verwenden, sind Mod-Rewrites und eine Rewrite-Map-Datei eine hervorragende Möglichkeit, diese Server-Seite zu lösen, vorausgesetzt, Ihr Hash ist eine vordefinierte Liste von Begriffen, die den angegebenen IDs zugeordnet werden.

Ich gehe davon aus, dass Sie dies für SEO Vorteile tun?

+0

In der Tat verwende ich Apache und sie sind vordefiniert. Der Vorgang des Hinzufügens von Elementen zum Mod-Rewrite müsste jedoch dynamisch sein, damit Benutzer es über ein Formular ausführen können. Könnten Sie bitte SEO definieren? Vielen Dank! – Willem

+0

Suchmaschinenoptimierung – NVRAM