2

API と chrome_ex_oauth を使用して、Tumblr にテキスト投稿をしようとしています。

承認された作品を取得する全体のプロセス。私が仕事に就けないのは、POSTを行うことです。私は次のことをしています:

編集: body フィールドに関する 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);

コードを調べて、何が間違っているのか考えてみましたが、まったくわかりません。あなたは?

私がどこで間違っているか知っていますか?

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['メソッド'] || '得る';
      var body = opt_params && opt_params['body'] || ヌル;
      var params = opt_params && opt_params['パラメータ'] || {}; 
      var headers = opt_params && opt_params['headers'] || {}; 
    var signedUrl = this.signURL(url, method, params );
    // うーん...?params はどこに渡されているのでしょうか? ChromeExOAuth.sendRequest(method, signedUrl, headers, body , function (xhr) { if (xhr.readyState == 4) { コールバック (xhr.responseText, xhr); } }); };
  3. signURLを変更しないparamsので問題ありません。
  4. Ctrl + F sendRequest:
    ChromeExOAuth.sendRequest = 関数 (メソッド、URL、ヘッダー、本文、コールバック) {
      var xhr = 新しい XMLHttpRequest();
      xhr.onreadystatechange = 関数 (データ) {
        コールバック (xhr、データ);
      }
      xhr.open(メソッド、URL、真);
      if (ヘッダー) { . . . }
      xhr.send(本体); // <-- !!! 
    };
  5. とった!bodyの代わりに使用する必要がありparametersます。
  6. body変数を にバックトラックしますrequest['body'](2 を参照)。
于 2012-05-13T09:23:06.613 に答える