3

Backbone.js Paginatorプラグインを使用しています。ページネーションに関与するモデルに対して独自の Collection を定義することで、無限スクロールのページネーションを適切に行います。ユーザーがログインしている場合、PHP バックエンドは追加の属性を含む Backbone オブジェクトを返し、is_likedそのアイテムに異なる CSS スタイルを持たせます。

問題: Paginator プラグイン (独自の Collection を持つBackbone.Paginator.requestPager) がバックエンドで GETfetchリクエストを実行すると、バックエンドはユーザーがログインしているかどうかを判断できません! ただし、通常の を使用するBackbone.Collectionと、バックエンドはユーザーがログインしているかどうかを判断できます! それもで動作し$.post()ます。これは、問題がプラグインにあると私に思わせますBackbone.Paginator.requestPager

Chrome の開発者ツールのネットワーク セクションを使用して、結果を確認しています。認証チェックが機能する場合api/test、ユーザーに関するデータが返されることがわかります。ログイン状態が判別できない場合は null を返す

更新:GETコレクションによって送信された要求には、によって送信された要求で見つかったヘッダーBackbone.Paginator.requestPagerの情報が含まれていません。これが問題でしょうか?ヘッダーから Cookie データを取り除かないようにするにはどうすればよいですか?CookieGETBackbone.CollectionBackbone.Paginator.requestPager

ここで何が起きてるの?そして、どうすればこれを解決できますか(自分のページネーションコードを書き直すことなく)?

PHP バックエンド (Laravel Framework) を使用した認証テスト

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;
    }

});
4

1 に答える 1

1

これはクロスドメインの問題です。

1つのリクエストは次のURLに対するものです: http ://www.mysite.com/api/test?page = 1

そしてこれに対する他の:http: //mysite.com/api/test

ブラウザの場合、www.mysite.comはまったく異なるため、www.mysite.comでCookieが生成された場合、mysite.comへのリクエストにはCookieが含まれません。両方のリクエストが同じドメインに送信され、Cookieの問題が発生しないことを確認してください。

于 2012-07-27T13:17:13.267 に答える