我只使用AJAX發出請求,大部分請求都會返回html,我將其加載到div#內容(不僅如此,請說出其最常見的操作)。發生問題時,我必須發送類似錯誤消息的內容,例如用戶會話過期時 - 那麼我必須「清除用戶桌面」(替換整個身體,而不僅僅是#內容)。 Ajax加載func,不知道它會得到什麼,所以服務器必須發送一些額外的信息,如何處理它的響應。如何發送HTML與額外的元數據,所以JS(ajax)知道如何處理響應?
我想過自定義標題,但想知道是否還有其他可能性或「最佳實踐」。
我只使用AJAX發出請求,大部分請求都會返回html,我將其加載到div#內容(不僅如此,請說出其最常見的操作)。發生問題時,我必須發送類似錯誤消息的內容,例如用戶會話過期時 - 那麼我必須「清除用戶桌面」(替換整個身體,而不僅僅是#內容)。 Ajax加載func,不知道它會得到什麼,所以服務器必須發送一些額外的信息,如何處理它的響應。如何發送HTML與額外的元數據,所以JS(ajax)知道如何處理響應?
我想過自定義標題,但想知道是否還有其他可能性或「最佳實踐」。
您可以發回的不僅僅是一個HTML片段,而是放入#content
,而不是一段JavaScript代碼,而是一個帶有一個鍵的JSON文檔來描述如何解釋它。
但是在將它應用到dom之前,它需要遍歷響應,這種方法是否存在性能缺陷? –
有幾種可能性:
您可以使用<meta>
HTML標記來描述問題。
您也可以簡單地發送隱藏的<div>
或<span>
或 並將其從AJAX接收端的結果中刪除。
我更喜歡某些東西,我不需要遍歷返回的html。 –
如果您在加載可能的元數據的內容中加載,則可能希望返回JSON。儘管看起來很sl,,但它運行良好,並且從中提取數據更容易。
{"body": "<h1>I'm a title!</h1>", "errors": []}
{"body": "<h3>Session Expired</h3>", "errors": ["sessionExpired"]}
可以結合起來,與HTTP狀態碼,如「422」,這將揭開序幕錯誤回調進一步定製和專業代碼。
要檢查你是否有沒有狀態碼的錯誤,你所要做的就是詢問response.errors.length並查看它是否是,例如0 ..在這種情況下,你知道沒有錯誤。否則,你會遇到一系列發生的錯誤,你可以通過循環來解決這些問題。爲了讓身體脫穎而出,只需做$(response.body) - 你現在有一個可以插入到任何地方的jQuery jized的html塊。
我想過了,但它會迫使我改變我返回頁面的方式(這是由Spring MVC支持的jsp)。這是我不想做的事情:/ –
關於狀態代碼 - 我可以使用自定義狀態代碼嗎?這可能就足夠了。 –
你可以。除了200類型的代碼jquery之外,任何東西都會將其解釋爲錯誤..因此,將4XX代碼與包含響應的內容一起發送回去會經歷您在錯誤位置放置的任何回調。所以,是的,那可以工作。只要小心使用正確的代碼。 – Stephen
不僅僅是[HTTP狀態碼](http://en.wikipedia.org/wiki/List_of_HTTP_status_codes)? – sdleihssirhc
是的,還有更多的東西,例如,當服務器想要重畫頁面的其他部分而不是#content時。但狀態代碼(+爲過期會話定製的東西)似乎是錯誤處理的最佳方法。 –
以及爲什麼沒有人喜歡我的自定義標題的想法? ;] –