我有一個網站,我建立了一個無限的滾動和當你滾動它加載下一個X結果,但我想知道如果theres標準或更好/優先方式的信號表明你已經到了最後,而不是做任何更多的要求。如何在AJAX響應中表示無限滾動結束?
目前的數據的「結束」後,請求數據,多數民衆贊成當它甫一404。如果AJAX調用收到錯誤/ 404響應,那麼它將記住不再打一個電話。
但對我來說感覺有點生,並想知道什麼處理這個通常的(如果有的話)的方式是。
我有一個網站,我建立了一個無限的滾動和當你滾動它加載下一個X結果,但我想知道如果theres標準或更好/優先方式的信號表明你已經到了最後,而不是做任何更多的要求。如何在AJAX響應中表示無限滾動結束?
目前的數據的「結束」後,請求數據,多數民衆贊成當它甫一404。如果AJAX調用收到錯誤/ 404響應,那麼它將記住不再打一個電話。
但對我來說感覺有點生,並想知道什麼處理這個通常的(如果有的話)的方式是。
如果我們假設你的「得到結果」 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-Type
或Content-Length
標題和響應主體,所以這確實節省了幾個字節。
(我用204)
無論哪種方式,您的客戶端腳本都知道,一個204或長度爲0的數組意味着沒有更多的數據,並能阻止發出請求。
那麼在該部分返回的數據是新條目的完整HTML。所以當接收到新數據時,所發生的一切就是它被附加到屏幕上的div中。而已。我想過用2個鍵做JSON。諸如「OK」或「NO MORE」之類的狀態關鍵字,然後是數據的關鍵字,它只是HTML,但將HTML放入JSON看起來有點麻煩?所以就像我現在在服務器端說的那樣,如果請求沒有產生任何匹配的結果,它只會發回一個404。javascript被設置爲當它收到404它不知道再發出請求 – binarysmacker
在你的情況下,如果沒有更多的內容,你可能會更好地回覆204。 – josh3736
看起來像204會算作jQuerys AJAX的「成功」。這就是爲什麼我使用404,因爲我只是把它設置爲「在失敗時指示結果結束」,因爲404計爲失敗。但是,似乎你能夠發現它的一個204如此糟糕的使用。感謝關於204的團長! – binarysmacker
如果您的Ajax正在返回HTML或文本,那麼只需返回一個空的響應來表示沒有更多數據。
如果Ajax正在返回JSON,那麼您可以將「status」屬性添加到對象表示中。
無論哪種方式,你應該用HTTP響應200,而不是404
它只是純粹的HTML返回,然後直接感興趣的頁面div的底部。所以你說我應該把404換成204,那我需要更「標準化」嗎?我使用404的原因是因爲AJAX是一個「失敗」的調用。所以我只是想它「在失敗設置一個變量,使AJAX永遠不會打另一個電話」 – binarysmacker
取決於您所加載的URL代表的是什麼。如果你正在加載一個不存在的條目,那麼404是好的;但如果你調用一個API,它應該回應「我存在但沒有結果」。 – Bergi