我正在尝试使用他们的API和chrome_ex_oauth向Tumblr发帖。
获得授权作品的整个过程。我无法工作的是做一个POST。我正在做以下事情:
编辑:我已更新代码以反映Rob W关于身体字段的正确建议
var stringify = function (parameters) {
var params = [];
for(var p in parameters) {
params.push(encodeURIComponent(p) + '=' +
encodeURIComponent(parameters[p]));
}
return params.join('&');
};
var onAuthorized = function() {
var url = 'http://api.tumblr.com/v2/blog/jindie.tumblr.com/post';
var request = {
'method': 'POST',
'headers':{
'Content-Type':'application/x-www-form-urlencoded'
},
'body': stringify({
'type': 'text',
'state': 'draft',
'title': 'Test post...',
'body': 'Hello, World!'
})
};
oauth.sendSignedRequest(url, function(responseText, xhr){alert(responseText);}, request);
};
oauth.authorize(onAuthorized);
我一直在检查代码,并思考可能出现的问题,但我真的不知道。你呢?
你知道我哪里出错吗?
答案 0 :(得分:3)
如果文档无法查看源代码,chrome_ex_oauth.js
。
您必须使用'body'
代替'parameters'
:
var request = {
'method': 'POST',
'body': {
为了找到原因,我按照这些步骤(注释了我的想法):
Ctrl + F sendSignedRequest
:
ChromeExOAuth.prototype.sendSignedRequest = function(url, callback, opt_params) { var method = opt_params && opt_params['method'] || 'GET'; var body = opt_params && opt_params['body'] || null; var params = opt_params && opt_params['parameters'] || {}; var headers = opt_params && opt_params['headers'] || {};
var signedUrl = this.signURL(url, method, params);
// Hmm...? Where is `params` being passed...? ChromeExOAuth.sendRequest(method, signedUrl, headers, body, function (xhr) { if (xhr.readyState == 4) { callback(xhr.responseText, xhr); } }); };
signURL
不会修改params
,因此这不是问题。sendRequest
:ChromeExOAuth.sendRequest = function(method, url, headers, body, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(data) { callback(xhr, data); } xhr.open(method, url, true); if (headers) { . . . } xhr.send(body); // <-- !!! };
body
代替parameters
。 body
变量回溯到 request['body']
(参见2)。