Backbone.js默认路径(子域)

时间:2014-01-14 23:55:55

标签: javascript jquery ajax backbone.js cors

我正在使用CORS所以所有的API都发生在api.mywebsite.com上,但该网站是通过website.com提供的。

我想知道我是否可以设置jQueryBackbone的设置以始终向我的api.mywebsite.com发出AJAX请求?

换句话说,我想在我的骨干集合中这样做:

url: '/books'

并自动推断api.mywebsite.com/v1/books

4 个答案:

答案 0 :(得分:0)

Backbone有urlRoot方法,用于设置所有请求的根目录。

来自Backbone网站:

var Book = Backbone.Model.extend({urlRoot : '/books'});
var solaris = new Book({id: "1083-lem-solaris"});
alert(solaris.url());

提醒“/ books / 1083-lem-solaris”

当然,您可以将相对路径更改为其他内容:在前面放置一个点以将其发送到站点根目录或您的特定站点根目录,或者为其提供绝对路径。

Documentation

答案 1 :(得分:0)

当然,在jQuery中,您可以在AJAX请求中为您喜欢的任何内容构建URL。包括绝对URL,只要它不是另一个域:

$.ajax({
    type: "GET",
    url: "http://api.mywebsite.com + "anything_you_want_to_add"
}).done(function(response) {
    console.log(response);
    receiveResponseMethodSomewhereElse(response);
});

答案 2 :(得分:0)

使用模型或集合的url参数的快速Backbone示例:

显示我使用的脚本:

<title>Backbone Test</title>
<meta charset="UTF-8">
<script src="jquery.js"></script>
<script src="underscore.js"></script>
<script src="backbone.js"></script>

然后我特意将这个骨干示例指向我的localhost。你想把它指向你的域名。我包含了所有控制台日志和可用响应,以满足您的调试需求。这里的两个选项都是从book id构建url,因为这也是你从服务器创建,读取,更新或删除的规范。我将此脚本直接放在页面正文中,并观察控制台日志。注意:Backbone期待JSON响应。

    <script>

        var Book = Backbone.Model.extend({urlRoot: 'http://localhost/url_test'});

        var BookCollection = Backbone.Collection.extend({
            model: Book,
            url: 'http://localhost/url_test'
        });

        var myExcellentBook = new Book({id: "book"});

        var MyBooks = new BookCollection();

        // getting it directly from the model
        solaris.fetch({
            success: function(model, response, options) {
                console.log("SUCCESS");
                console.log(model);
                console.log(response);
                console.log(options);
            },
            error: function(model, response, options) {
                console.log("ERROR");
                console.log(model);
                console.log(response);
                console.log(options);
            },
            complete: function(xhr, textStatus) {
                console.log(textStatus);
            }
        });

        // or fetch directly from the collection and
        // normally you'd loop through the response or
        // when creating new models, you can let backbone
        // intialize them through the response
        MyBooks.fetch({
            success: function(model, response, options) {
                console.log("SUCCESS");
                console.log(model);
                console.log(response);
                console.log(options);
            },
            error: function(model, response, options) {
                console.log("ERROR");
                console.log(model);
                console.log(response);
                console.log(options);
            },
            complete: function(xhr, textStatus) {
                console.log(textStatus);
            }
        });
    </script>

url_test的php脚本只是返回一个JSON对象。

<?php
echo '[{"id": "MyNewBook"}]';

答案 3 :(得分:0)

对于集合,您可以指定完整的URL:

YourApp.Collections.Books = Backbone.Collection.extend({
  model: YourApp.Models.Book,
  url: 'http://api.mywebsite.com/v1/books/'
});

对于个人资源,您可以使用函数生成网址:

YourApp.Models.Book = Backbone.Model.extend({
  url: function() {
    return 'http://api.mywebsite.com/v1/books/' + this.get('id')
  }
});