1

这是我的js代码。

我正在使用最新的 jQuery 和 Backbone 库。

(function(Tweet) {

    //Tweet.Model = Backbone.Model.extend();

    Tweet.Collection = Backbone.Collection.extend({
        url: function() {

            return "http://search.twitter.com/search.json?q=twitterapi&callback=?";

        },

        parse: function(data) {
            return data.results;
        }
    });

    Tweet.Views.List = Backbone.Layout.extend({
        template: "#list",

        events: {
            "click li": "update"
        },

        update: function(ev) {
            var index = $(ev.target).index();
            var model = this.collection.at(index);

            this.trigger("update", model);
        },

        serialize: function() {
            return { tweets: this.collection };
        }
    });

    Tweet.Views.Detail = Backbone.Layout.extend({
        template: "#detail",

        serialize: function() {
            return { tweet: this.model };
        }
    });
}) (twitter.module("tweet"));

当我运行网址http://search.twitter.com/search.json?q=twitterapi&callback=?在我的浏览器上,我可以看到结果。

所以我和推特有联系。

当我删除回调=?从我的代码中的 url,我得到了跨域错误。

所以这意味着我的 jQuery 和 Backbone 版本已经更新到足以自动将我的请求格式化为 jsonp 回调。

但我不断收到 403 错误。

以下是 Chrome 控制台以红色表示的错误:

GET http://search.twitter.com/search.json?q=twitterapi&callback=jQuery19107466092116665095_1364193857160&_=1364193857161 403 (Forbidden) 

请帮助我了解我是否做错了什么?

更新

我根据一些建议尝试了以下方法。

我添加了这个https://github.com/jacebeleren/backbonelayoutmanager/commit/6af9a367cea5bcf460b67319137d6f077b1ff5ec

..还有这个 https://github.com/jacebeleren/backbonelayoutmanager/commit/01cfba1c416673617591b0c936e41a27b93bbf51

但错误仍然存​​在。

更新 2

这些是我为 403 错误获得的请求标头。

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:pid=v3:1364189785315637597538615; guest_id=v1%3A136419139351112726; k=10.35.60.125.1364192963733514; __utma=43838368.881187358.1364192967.1364192967.1364192967.1; __utmc=43838368; __utmz=43838368.1364192967.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _twitter_sess=BAh7CToPY3JlYXRlZF9hdGwrCKCsPKA9AToMY3NyZl9pZCIlNzc0NjU5ZmQ5%250AN2Q4MjA0M2RjYzQzMjMyZTFjMDk3ZTkiCmZsYXNoSUM6J0FjdGlvbkNvbnRy%250Ab2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7AAY6CkB1c2VkewA6B2lkIiUxZTc3%250AMTFiNjcwN2M0OWM0OTVmMDA0ODgxNTQ1MzdkZA%253D%253D--43c3e3ef6a53296eb8f6640c3e9dc21539f18ef6
Host:search.twitter.com
Referer:http://bblm.localhost/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
4

1 回答 1

0

Backbone 不会自动格式化您对 JSONp 调用的请求。你需要{ dataType: "jsonp" }在你的 fetch 调用中发送 jQuery 来格式化它。

看到这个:https ://stackoverflow.com/a/9996420/340266

于 2013-03-25T10:26:41.707 回答