2

backbone.js の学習を始めたばかりで、Web クライアントをバックボーン アプリに変換しようとしています。ただし、単純なリクエストを API に送信することはできません。私たちの Web サービスは python、flask-restful で書かれています。アプリは API に対して OPTIONS リクエストのみを行います。(get リクエストを行う必要があります)

バックボーン自体の問題ではなく、サーバーの問題だと思います。URLをhttps://api.github.com変更してエンドポイントを変更すると/gists/1、魅力的に機能するためです。同様の問題に関するスタックオーバーフローの質問をいくつか読みました。stackoverflow ユーザーから提案された CORS の問題だと思いましたが、コンソールにはプリフライトされたリクエストしか表示されません。

ただし、サーバーには既に設定Access-Control-Allow-Origin*ています。さらに、localhostでサーバーを実行し、localhostからリクエストを行っても機能しません。(ポートが違いますが、ポートが違うとクロスサイトと呼ばれるかどうかはわかりません)

サーバーへのjquery ajaxリクエストをうまく作成できます。バックボーンでは機能しません。

これまでの基幹アプリはこちら、

$.ajaxPrefilter( function( options, originalOptions, jqXHR ) {
    options.url = 'http://localhost:5000' + options.url;
});

var Complaints = Backbone.Collection.extend({
    url: '/complaint/recent'
});

var ComplaintList = Backbone.View.extend({
    el: ".content",
    render: function() {
        var that = this;
        var complaints = new Complaints();
        complaints.fetch({
            success: function(res) {
                console.log(res);
            }
        });
        // console.log("hede2");
        // return this.$el.html("hede2");
    }
});

cList = new ComplaintList();

// routers
var Router = Backbone.Router.extend({
    routes: {
        "": "home"
    }
});

var router = new Router();
router.on("route:home", function() {
    cList.render();
});

Backbone.history.start();

これはフラスコ安静からのエンドポイントです。

class ComplaintRecent(restful.Resource):
    def get(self):
        category = request.args.get('category', '')
        sinceid = request.args.get('sinceid', '')
        slug_city = request.args.get('slugcity', '')
        return ccomp.get_recent_complaints(category, sinceid, slug_city)

サーバーの応答は、誰かが問題があるかどうかを特定するのに役立つ可能性があります。

 00:28 ~ $ curl -I -X OPTIONS http://api.enforceapp.com/complaint/recent
HTTP/1.1 200 OK
Server: nginx/1.2.1
Date: Thu, 30 Jan 2014 22:31:51 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Allow: HEAD, GET, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE
Access-Control-Allow-Credentials: true

バックボーンの学習の初日で迷っています。freenode で同じ質問をしましたが、答えが得られませんでした。

可能性のある問題について教えていただけることがあれば、本当にうれしいです。

4

1 に答える 1

1

backbone.js は、PUT および POST リクエストからの応答に、更新/保存されたオブジェクトが含まれていることを期待していると思います。これが、そのままでは django-tastypie で動作しない理由です。

あなたの例の応答ヘッダーは、「content-length: 0」を示しています。

于 2014-04-24T09:52:50.823 に答える