403使用Backbone和jQuery禁止Twitter搜索

时间:2013-03-25 06:54:01

标签: jquery backbone.js twitter jsonp

这是我的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=时?在我的浏览器上,我可以看到结果。

所以我与twitter有联系。

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

所以这意味着我的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

1 个答案:

答案 0 :(得分:0)

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

请参阅:https://stackoverflow.com/a/9996420/340266