On Saturday, September 12, 2015 at 6:19:41 AM UTC-7, Val Waeselynck wrote:
> Because you're working with AJAX, you do not want your server to redirect. 
> You want to just send the data to the server, and then change the URL of the 
> page with something like 
> 
> window.location.href = <job-page-url>
> 
> Le samedi 12 septembre 2015 05:34:58 UTC+2, Hari Krishnan a écrit :
> > Hello All,
> > 
> > 
> > I am working on a use case as follows:  The UI is with reagent, re-frame 
> > for subscription & Luminus, and for the backend, I use Compojure.  I also 
> > tried with Liberator, but for simplicity, I am using only Compojure now.
> > 
> > I also use Secretary & cljs-ajax for SPA routing and ajax.
> > 
> > -> User brings up "/person"  URL, and use a set of actions.  The page data 
> > is sent to the backend, gets validated and saved to the DB.  Then the user 
> > has to be re-directed to "/job".  If there is any error, the errors will be 
> > displayed on the "/person"  page.
> > 
> > There are two application components -- one with the URL "/person",and the 
> > other with "/job".  With each of these, I have a few related pages, and I 
> > am creating them as SPA with Reagent.
> > 
> > The question is how do I redirect to the "/job"?
> > 
> > Client Side Code (only the the relevant ones)
> > 
> > (POST "/person"
> >       {:headers {"Accept" "application/clojure"}
> >        :params @doc
> > 
> >        :handler ex-handler
> >        :error-handler ex-error-handler})
> > 
> > Server:
> > (defn process-person []
> >   (-> (redirect "/job" :permanent)
> >       (header "Content-Type"  "text/html; charset=utf-8")
> >       (header "Location"  "/job")
> >       )
> >   )
> > 
> > (POST "/person" [params] (process-person params))
> > 
> > Interestingly, on the console, I can see the HTML for the "job" page.  Do I 
> > have to change the Secretary code to make it happen?
> > 
> > Any help is much appreciated.
> > 
> > Regards,
> > Hari

Hi Val,

Thanks for the answer.  I still have one more issue related to this logic.  
When I set the :location at the header onn the server side, what I see on the 
client console (Chrome) is as follows (logging the response from the server):  
I don't see the location key/value, instead, I see the whole page in HTML.  Any 
hint?  tried with different doc-types.

{:status 200, 
        :success true, 
        :body "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n  <!-- Meta, title, 
CSS, favicons, etc. -->\r\n  <meta charset=\"utf-8\">\r\n  
<title>----------</html>\r\n", 

:headers {"date" "Sat, 12 Sep 2015 18:27:30 GMT", "x-content-type-options" 
"nosniff", "server" "undertow", "x-frame-options" "SAMEORIGIN", "content-type" 
"text/html; charset=utf-8", "connection" "keep-alive", "content-length" "3928", 
"x-xss-protection" "1; mode=block"}, 
:trace-redirects ["/person" "/person"], 
:error-code :no-error, 
:error-text ""}

(defresource post-person-resource
             :available-media-types [ "application/clojure"]
             :allowed-methods [:post]
             :post! (fn [context] ())
             :post-redirect? (fn [ctx] {:location "/job"})

ON THE Client side, I solved the redirect issue with the following code:

(.assign js/location "/job")

But I couln't find the location in the header.  So I hard-coded it here!

Thanks for the response.

Regards,
Hari

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to