2

我正在尝试使用他们的 API 和 chrome_ex_oauth 向 Tumblr 发布文本。

获得授权作品的全过程。我不能去工作的是做一个POST。我正在执行以下操作:

编辑:我更新了代码以反映 Rob W 关于 body 字段的正确建议

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);

我一直在检查代码,并思考可能出了什么问题,但我真的不知道。你?

你知道我哪里错了吗?

4

1 回答 1

3

如果文档没有帮助,请查看源代码,chrome_ex_oauth.js.

您必须使用'body'而不是'parameters'

var request = {
  'method': 'POST',
  'body': {

调试

为了找到原因,我遵循了这些步骤(注释我的想法):

  1. 显然,帖子正文是空的。所以,API的实现肯定是错误的。
  2. Ctrl + F sendSignedRequest

    ChromeExOAuth.prototype.sendSignedRequest = function(url, callback, opt_params) {
      var 方法 = opt_params && opt_params['method'] || '得到';
      var body = opt_params && opt_params['body'] || 无效的;
      var params = opt_params && opt_params['parameters'] || {}; 
      var headers = opt_params && opt_params['headers'] || {}; 
    var signedUrl = this.signURL(url, method, params );
    // 唔...?`params` 在哪里被传递...? ChromeExOAuth.sendRequest(方法, signedUrl, headers, body , function (xhr) { 如果(xhr.readyState == 4){ 回调(xhr.responseText,xhr); } }); };
  3. signURL不修改params,所以这不是问题。
  4. Ctrl + F sendRequest
    ChromeExOAuth.sendRequest = function(method, url, headers, body , callback) {
      var xhr = new XMLHttpRequest();
      xhr.onreadystatechange = 函数(数据){
        回调(xhr,数据);
      }
      xhr.open(方法,网址,真);
      如果(标题){。. . }
      xhr.send(正文); // <-- !!! 
    };
  5. 知道了!body必须使用而不是parameters.
  6. body将变量回溯到request['body'](参见 2)。
于 2012-05-13T09:23:06.613 回答