2011-04-13 22 views
2

我在我的Ruby On Rails應用程序中使用JQuery的時候,我嘗試了一下不顯眼的JS。jquery.post():我如何兌現從服務器的重定向?

用戶填寫表單之後,客戶端的jQuery代碼調用:

$.post("/premises", ui.form) 

我可以看到POST打服務器,我可以看到服務器發出一個重定向通知http://localhost:3000/users/42完成要顯示的數據。

但瀏覽器頁面沒有改變。這並不令我感到驚訝 - 客戶端JavaScript的全部重點是控制更新的內容 - 我明白了。但是在這種情況下,我想兌現服務器回覆的任何內容。

我試圖根據How to manage a redirect request after a jQuery Ajax call延長通話後():

$.post("/premises", 
     ui.item, 
     function(data, textStatus) { 
      if (data.redirect) { 
       // data.redirect contains the string URL to redirect to 
       window.location.href = data.redirect; 
      } else { 
       // data.form contains the HTML for the replacement form 
       $("#myform").replaceWith(data.form); 
      } 
     }); 

...但(其他問題)data.redirect是不確定的。我懷疑真正的答案很簡單,對吧?期待它!

回答

0

服務器說您要用JavaScript處理的數據可以在不同的URL上獲得,而不是瀏覽器應該將一個新文檔加載到頂級框架中。發送瀏覽器到它被告知使用JS請求的數據的URL是不符合重定向的。

如果你想這樣做,那麼服務器應該響應數據(在響應的主體中),JavaScript解釋爲將一個新值賦給location的原因。

0

data.redirect可能是未定義的,因爲您沒有在服務器端指定它。在答案中,您鏈接的觀點是無論結果如何,服務器始終以200響應,然後發回的JSON正文決定客戶端如何響應。所以,在服務器端,你想回應{"redirect" : "/where/to/go"}

1

你引用的帖子使用JSON作爲返回值,它正在服務器端構建該json。這意味着,如果有重定向數據對象看起來像

{redirect:'redirecturl.html'} 

,如果它不然後重定向數據對象會像

{form:html-string-for-form} 

現在的工作就是據此構建在服務器端

JSON對象
+0

希望服務器可以用有效的JSON響應。 – Quentin 2011-04-13 20:17:05

相關問題