2013-02-23 13 views
5

In der Dokumentation von PJAX steht, dass Github $.pjax.submit() in submitting a Gist form verwendet. Ein gewünschtes Feature einer Ajax-Formularübergabe, das Github schön implementiert, ist, dass die URL von der action Form des Formulars zu einer neu erstellten URL umleitet (in diesem Fall enthält eine die neu serverseitig erstellte Gist-ID).pjax URL-Umleitung einreichen

Zum Beispiel, von hier:

https://gist.github.com/gists // form action 

dazu:

https://gist.github.com/tim-peterson/5019589 //assume this ID is generated server side 

ich bekommen habe dies auf meiner Seite in ähnlicher Weise zu arbeiten (dh die Seite selbst leitet auf das Äquivalent von https://gist.github.com/tim-peterson/5019589) aber ich kann die URL nicht umleiten (es bleibt wie https://gist.github.com/gists).

Ist das ein serverseitiges Problem (Header setzen?) Oder gibt es etwas in Pjax, dass ich vermisse? Ich benutze eine Version von pjax, die ich heute heruntergeladen habe, also kann es nicht sein, dass ich eine Buggy-Version von pjax verwende.

Antwort

1

Es mag eine elegantere Methode geben, dies mit $ .pjax.submit() zu tun, aber das ist die Lösung, die ich ohne Probleme benutzt habe. Ich serialisiere die Formulareingaben vor der Einreichung und poste sie dann an meinen Server. Überprüfen Sie dann die Antwort vom Server, um sicherzustellen, dass ich den Benutzer nicht daran hindern muss, weiterzumachen, bevor Sie meinen PJAX anrufen, um fortzufahren.

$("#save").click(function(e) { 

    e.preventDefault(); 
    dataString = $("#form").serialize(); 

    $.ajax({ 
    type: "POST", 
    url: $("#form").attr("action"), 
    data: dataString, 
    dataType: "json", 
    success: function(data) 
    { 
     // Handle the server response (display errors if necessary) 

     $.pjax({ 
     timeout: 2000, 
     url: data.url, 
     container: '#main-content' 
     }); 

    } 
    }); 
}); 
+0

dank enthält ja das ist genau das, was ich tue auch als Hack Lösung. Die Frage ist, ob dies mit 2 AJAX-Anfragen oder nur 1 erreicht werden kann. Es wäre natürlich besser, nur eine Anfrage zu haben, bei der die Datei "data.url" in die Browserleiste gedrückt wurde, genau wie der Inhalt zu "verschoben" wurde # Hauptinhalt'. Jetzt, da ich es mir ansehe, scheint Github Gist dasselbe zu tun wie wir, indem wir 2 Anfragen machen, obwohl sie PJAX (POST) -> PJAX (GET) machen und wir machen AJAX (POST) -> PJAX (BEKOMMEN). Die Quintessenz ist, dass es performanter erscheint, nur eine Anfrage zu machen (Fortsetzung im nächsten Kommentar ...). –

+0

Ich bin nur nicht sicher, ob dies in 1 Anfrage mit PJAX möglich ist oder ob es einen serverseitigen Hack erfordert, den ich nicht kenne (ich benutze PHP/Codeigniter und mache eine 301/302-Weiterleitung mit AJAX) Anfragen ändern nicht die URL, vielleicht ist es in keiner Sprache/in keinem Framework möglich?). –

5

Haben Sie eine Lösung gefunden? Ich hatte das ähnliche Problem.

Grundsätzlich müssen Sie X-PJAX-URL-Eigenschaft im Antwortheader festlegen. Ihr Wert sollte derselbe sein wie URL anfordern.

In Laravel, ich habe es so ...

App::after(function($request, $response) 
{ 
    $response->headers->set('X-PJAX-URL', $request->getRequestUri()); 
}); 
0

Es passiert, wenn Antwort HTML nicht initial PJAX Behälter