post到指定的URL
Backbone.js won't post to the specified URL
我有一个Backbone.js应用程序运行这个生成器https://github.com/yeoman/generator-backbone。我需要使POST
请求运行在不同的服务器和域上的服务。在我的模型中,我有以下内容:
urlRoot: 'https://custom.com/',
saveData: function(params) {
this.set(params);
if(this.isValid()) {
this.save(null, {
url: 'api/v1/data',
success: function(model, response, options) {
// success
},
error: function(model, response, options) {
// error
}
});
}
}
当我尝试发布数据时,它将数据发布到http://localhost:9000/api/v1/data
。是否知道为什么Backbone选择POST
到它正在运行的服务器,而不是我提供的设置(https://custom.com/api/v1/data
)?
在我的服务器上,我在NodeJS上运行Restify(我允许来自任何客户端进行测试)。下面是我如何设置CORS:
// Setup CORS
api.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', 'X-Requested-With');
return next();
});
我怀疑服务器有问题,因为客户端甚至没有到达它,因为指定的URL以某种方式自动映射到http://localhost:9000/api/v1/data
而不是https://custom.com/api/v1/data
。
更新:如果我做它"手动"与jQuery(不使用骨干的API),它的工作:
saveData: function() {
$.ajax({
type: 'POST',
data: this.toJSON(),
url: 'https://custom.com/api/v1/data'
})
.success(function() {
// success
})
.fail(function() {
// fail
});
}
是否有办法使用Backbone的API?
将url
作为选项传递给Backbone.Model.prototype.save
将绕过url生成逻辑(即urlRoot
),并假设url选项是完整路径(如果不post到当前域,包括域)。
您应该将urlRoot
设置为实体的路径(或您的后端平台可能调用的任何路径),因此在您的情况下,它应该是:
var MyModel = Backbone.Model.extend({
urlRoot: 'https://custom.com/api/v1/data'
});
var myModel = new MyModel();
myModel.save(); // POST https://custom.com/api/v1/data
// Assuming that returns an id of '123';
myModel.save(); // PUT https://custom.com/api/v1/data/123
myModel.destroy(); // DELETE https://custom.com/api/v1/data/123
如果你的服务器没有设置处理骨干样式RESTful端点,那么你可能只是想覆盖Backbone.Model.prototype.url
而不是urlRoot
。
如果你只想测试调用服务器,你可以下载一个chrome扩展。它将允许您调用不同的域。这里:https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi
发送请求到不同的域将无法从浏览器工作。解决这个问题的更好方法是在server.
- JavaScript 中的 POST url 被注释掉了
- 使用 POST 方法通过 ajax 发送的数据在发送到服务器之前是否必须进行 URL 编码
- Angular 2:HTTP Post Request,带有URL参数和正文类型参数
- 使用表单和POST方法通过Javascript获取URL参数
- 如何在不更改URL的情况下使用HTTP方法POST
- qoxdoo:POST方法,不在URL中显示参数
- 如何在NodeJS中对POST请求进行url解码
- jQuery/PHP-POST-Forbidden(403)当试图在我的JSON数据中发送完整的URL时
- 当使用预先签名的POST url将文件上传到AWS S3时,设置随机文件名
- 获取链接帖子使用脚本“data:post.url”博主不起作用
- jQuery $.ajax post getting referer url for error debugging
- XMLHttpRequest POST 请求到当前 URL 的有效 URL 字符串
- AngularJS在使用method:POST时$resource调用错误的API URL
- 使用Joomla的jRoute库时POST URL的问题
- 如何在 ASPX 页的代码隐藏中使用 POST 设置图像的 url
- Ajax Post请求总是运行错误功能,尽管卷曲到相同的url工作正常
- Ajax 无法使用 jquery url post 方法
- 从javascript到php的动态url POST
- Node.js URL POST rewrite
- Ajax POST调用不能正常工作,返回错误代码0,即使url POST成功