我正在使用CORS
所以所有的API都发生在api.mywebsite.com上,但该网站是通过website.com提供的。
我想知道我是否可以设置jQuery
或Backbone
的设置以始终向我的api.mywebsite.com
发出AJAX请求?
换句话说,我想在我的骨干集合中这样做:
url: '/books'
并自动推断api.mywebsite.com/v1/books
答案 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”
当然,您可以将相对路径更改为其他内容:在前面放置一个点以将其发送到站点根目录或您的特定站点根目录,或者为其提供绝对路径。
答案 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')
}
});