在骨干网中启用CORS

时间:2015-09-17 20:50:41

标签: javascript ajax backbone.js

我是骨干的新手,我终于在一个小项目上取得了一些进展。我想我正在正确地执行ajax get请求,但我现在在浏览器中收到此错误:

" XMLHttpRequest无法加载https://api.flickr.com/services/rest/?jsoncallback=? Access-Control-Allow-Methods不允许使用FLICKR.PHOTOS.SEARCH方法。 "

如何在骨干网中启用CORS?

我的观点:

var PictureView = Backbone.View.extend({
    //the goal of this app is to append HTML to the appID div.  on button click, fetch a random image from flickr.
    el: "#app",


    initialize: function() {
        $('.button').click(function() {
            this.request()
        }.bind(this))
    },

    request: function() {
        console.log('asdfkjsf')

        $.ajax({

            url: "https://api.flickr.com/services/rest/?jsoncallback=?",
            method: 'flickr.photos.search',
            api_key: "mykey",
            format: 'json',
            nojsoncallback: 1,
            per_page: 1,
            success: function(result) {
                console.log(arguments)

                this.$el.append('<img src="' + result + '" />')
            }.bind(this)

        });
    }


})

我的模特:

var Picture = Backbone.Model.extend({
    defaults: {

        image: ""
    }

});

1 个答案:

答案 0 :(得分:1)

要回答您的直接问题,请不要在Backbone中启用CORS。您(或者,更准确地说,在这种情况下,Yahoo)将在服务器上启用CORS,例如Flickr的。

但问题不在于CORS;你没有正确使用Flickr API。 $.ajax调用的参数完全错误。 Flickr在REST documentation中提供了示例网址。

更重要的是,您通过从View发出API请求而严重滥用Backbone。这应该在模型或集合中完成。并且,鉴于上述细节,您不需要提供自己的AJAX调用;如果提供了正确的URL,标准Backbone.Sync将正常工作。

我建议退一步,花一些时间学习REST API和Backbone最佳实践。网上有很多教程。一旦您对这些技术更熟悉,您就会发现开发应用程序要容易得多。