我正在尝试将骨干用于本地项目,该项目永远不会看到真正的 Web 服务器,并且通过 AJAX 与 Yelp API 交互。Yelp API 要求我们使用 oauth 进行身份验证,并提供了示例代码,我根据这些代码对自己的代码进行了建模。当我使用示例代码时,我没有遇到任何跨域问题或任何问题。但是,当我关闭浏览器安全选项时,我只会收到 400 错误响应。
我曾尝试按如下方式覆盖 fetch 方法:
fetch: function(options) {
var accessor, message, parameterMap, parameters;
if (!options) {
options = {};
}
accessor = {
consumerSecret: LOAF.auth.conserumerSecret,
tokenSecret: LOAF.auth.accessTokenSecret
};
parameters = [];
parameters.push(['oauth_consumer_key', LOAF.auth.consumerKey]);
parameters.push(['oauth_consumer_secret', LOAF.auth.consumerSecret]);
parameters.push(['oauth_token', LOAF.auth.accessToken]);
parameters.push(['oauth_signature_method', 'HMAC-SHA1']);
parameters.push(['location', "New York City"]);
message = {
'action': this.url,
'method': 'GET',
'parameters': parameters
};
OAuth.setTimestampAndNonce(message);
OAuth.SignatureMethod.sign(message, accessor);
parameterMap = OAuth.getParameterMap(message.parameters);
parameterMap.oauth_signature = OAuth.percentEncode(parameterMap.oauth_signature);
options.url = this.url;
options.data = parameterMap;
options.cache = true;
options.dataType = 'json';
options.success = this.onResponse;
console.log("Attempting");
console.log(options);
return Backbone.Model.prototype.fetch.apply(this, options);
},
但这会产生 400 响应。我有一种感觉,因为我没有正确地进行 AJAX 调用,因为主干为我完成了大部分工作,并且可能会覆盖我正在设置的一些选项。我认为我需要做的是覆盖这个集合的“同步”方法,而不是只处理 OAuth 并自己解析响应。有一个更好的方法吗?