2012-07-27 69 views
2

我正在使用Backbone.js Paginator插件。它通過爲分頁中涉及的模型定義自己的Collection來進行無限滾動分頁。如果用戶登錄,則PHP後端將返回具有附加屬性的Backbone對象is_liked以使該項目具有不同的CSS樣式。使用Paginator(backbone.js)時無法檢測用戶是否登錄

問題:當分頁程序插件(有自己的收藏Backbone.Paginator.requestPager)沒有一個GET在後端fetch請求,後端是無法確定用戶是否登錄!但是,當我使用通常的Backbone.Collection時,後端能夠確定用戶是否已登錄!它也適用於$.post()。這讓我覺得問題出在插件的Backbone.Paginator.requestPager

我正在使用Chrome的開發人員工具的網絡部分檢查結果。如果驗證檢查有效,則可以看到api/test返回有關用戶的一些數據。如果登錄狀態無法確定,則返回null

UPDATE:GET請求通過Backbone.Paginator.requestPager收集發送不包括在在GET請求被髮送Backbone.Collection發現頭的Cookie信息。這可能是問題嗎?我如何強制Backbone.Paginator.requestPager不從頭去除cookie數據?

這裏發生了什麼?我該如何解決這個問題(不需要重寫自己的分頁代碼)?

使用PHP後端(Laravel框架)

Route::any('api/test', function() { 
    // This will return some data of the user if logged in 
    return json_encode(Auth::user()); 
}); 

典型的骨幹收集[作品]

SimilarUserCollection = Backbone.Collection.extend({ 
    model: User, 
    url: 'api/test' 
}); 

分頁程序的集合[行不通] 驗證測試

PhotoCollection = Backbone.Paginator.requestPager.extend({ 
    model: Photo, 

    paginator_core: { 
      type: 'GET', 
      dataType: 'json', 
      url: 'api/test' 
     }, 

    paginator_ui: { 
     firstPage: 1, 
     currentPage: 1, 
     perPage: 7, 
     totalPages: 10 
    }, 

    server_api: { 

     'page': function() { return this.currentPage; } 
    }, 

    parse: function (response) { 

     return response; 
    } 

}); 
+0

您是根據發送的cookie確定登錄信息的?在驗證標題上?怎麼樣?你的第一個集合(有效)使用你的'用戶'模型,但是部分集合(不會)使用你的'photo'模型 – tkone 2012-07-27 11:58:24

+0

這兩個集合在同一個URL上執行'fetch()',檢查用戶是否登錄了,所以我猜'模型'無所謂,但我可能是錯的。 PHP框架使用數據庫會話,所以我想這意味着存儲一個cookie,其會話數據存儲在數據庫中。我使用PHP框架的內置函數來獲取用戶是否登錄。 – Nyxynyx 2012-07-27 12:03:01

+0

嘗試將'PhotoCollection'的'Model'從'Photo'更改爲'User',並得到相同的結果。 – Nyxynyx 2012-07-27 12:06:31

回答

0

這是一個跨域的問題:

一個請求就是這個網址: http://www.mysite.com/api/test?page=1

和對方這樣的: http://mysite.com/api/test

對於瀏覽器www.mysite.com是完全不同的,所以如果Cookie在www.mysite.com上生成,則對mysite.com的請求將不包含它。確保這兩個請求都轉到同一個域,並且您不會有Cookie問題。