Backbone.js默认路径(子域)

bf1o4zei  于 2022-11-10  发布在  其他
关注(0)|答案(4)|浏览(180)

我使用的是CORS,所以所有API都在www.example.com中api.mywebsite.com但网站是通过website.com提供服务的。
我想知道是否有一种方法,我可以设置jQueryBackbone的设置,总是使 AJAX 请求我的api.mywebsite.com
换句话说,我想在我的 Backbone.js 集合中这样做:

url: '/books'

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

ih99xse1

ih99xse11#

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

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

对于单个资源,您可以使用函数来生成url:

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

pieyvz9o2#

Backbone具有urlRoot方法,该方法设置所有请求的根。
从 Backbone.js 站点:

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

alerts“/books/1083-太阳能电池板”
当然,您可以将相对路径更改为其他路径:请在前面加一个点,将其发送到站点根目录或特定的站点根目录,或者给予一个绝对路径。
文件

thtygnil

thtygnil3#

当然,在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);
});
7eumitmz

7eumitmz4#

还有一个使用Model或Collection的url参数的快速 Backbone.js 示例:
显示我使用的脚本:

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

然后我特别指出了这个 Backbone.js 示例在我的localhost上。你可能想把它指向你的域。我包括了所有的控制台日志和可用的响应,以方便你调试。这里的两个选项都是从图书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"}]';

相关问题