2013-07-23 35 views
1

我有一個網站,我建立了一個無限的滾動和當你滾動它加載下一個X結果,但我想知道如果theres標準或更好/優先方式的信號表明你已經到了最後,而不是做任何更多的要求。如何在AJAX響應中表示無限滾動結束?

目前的數據的「結束」後,請求數據,多數民衆贊成當它甫一404。如果AJAX調用收到錯誤/ 404響應,那麼它將記住不再打一個電話。

但對我來說感覺有點生,並想知道什麼處理這個通常的(如果有的話)的方式是。

+2

取決於您所加載的URL代表的是什麼。如果你正在加載一個不存在的條目,那麼404是好的;但如果你調用一個API,它應該回應「我存在但沒有結果」。 – Bergi

回答

1

如果我們假設你的「得到結果」 API調用看起來是這樣的:

$.get('/results', { start: n }, function() ...); // for ex, /results?start=0 

,並返回類似:

[{ name: 'Result 1' }, { name: 'Result 2' }, ... ] 

其中n是已經加載的結果的數量,那麼它在語義上沒有意義返回404錯誤,這意味着要求資源(這是/results)不存在。這不是真的; /results確實存在,但請求參數不生成數據。

它更適合於一個空數組返回200,

[] 

...或HTTP 204無內容,這意味着請求成功響應,但並沒有什麼返回。由於服務器不需要發送Content-TypeContent-Length標題和響應主體,所以這確實節省了幾個字節。

(我用204)

無論哪種方式,您的客戶端腳本都知道,一個204或長度爲0的數組意味着沒有更多的數據,並能阻止發出請求。

+0

那麼在該部分返回的數據是新條目的完整HTML。所以當接收到新數據時,所發生的一切就是它被附加到屏幕上的div中。而已。我想過用2個鍵做JSON。諸如「OK」或「NO MORE」之類的狀態關鍵字,然後是數據的關鍵字,它只是HTML,但將HTML放入JSON看起來有點麻煩?所以就像我現在在服務器端說的那樣,如果請求沒有產生任何匹配的結果,它只會發回一個404。javascript被設置爲當它收到404它不知道再發出請求 – binarysmacker

+0

在你的情況下,如果沒有更多的內容,你可能會更好地回覆204。 – josh3736

+0

看起來像204會算作jQuerys AJAX的「成功」。這就是爲什麼我使用404,因爲我只是把它設置爲「在失敗時指示結果結束」,因爲404計爲失敗。但是,似乎你能夠發現它的一個204如此糟糕的使用。感謝關於204的團長! – binarysmacker

1

你是如何處理分頁的?通常建議在您的AJAX響應中包含「下一頁」鏈接。如果你這樣做,它避免了必須在客戶端進行數學計算,並提供了一個簡單的通信機制,只是不包含鏈接,如果它不是有效的。

+1

真的嗎?我不想讓你把數據格式的演示文稿。 –

+1

@LightnessRacesinOrbit:分頁不僅僅是表示,它是數據檢索過程的核心。如果您正在請求分頁資源(無論您是否要求分頁),則返回與分頁有關的信息是合乎邏輯的。與鏈接的數據類似,我可以將它內聯或給你一個標識符,兩者都是有效的。 – Guvante

+0

+1爲最乾淨的解決方案。 – Bergi

1

如果您的Ajax正在返回HTML或文本,那麼只需返回一個空的響應來表示沒有更多數據。

如果Ajax正在返回JSON,那麼您可以將「status」屬性添加到對象表示中。

無論哪種方式,你應該用HTTP響應200,而不是404

+0

它只是純粹的HTML返回,然後直接感興趣的頁面div的底部。所以你說我應該把404換成204,那我需要更「標準化」嗎?我使用404的原因是因爲AJAX是一個「失敗」的調用。所以我只是想它「在失敗設置一個變量,使AJAX永遠不會打另一個電話」 – binarysmacker