0

JQuery.ajax() メソッドを介して Asana API から情報を取り込もうとしています。しかし、目的の結果が返されないか、エラーが表示されました。
JavaScript での私の部分的なコードは次のとおりです。

$(document).ready(function () {

    $('#buttonCallAjax').click(function () {
        jQuery.support.cors = true;
            $.ajax(
                {
                    type: "GET",
                    url: "https://app.asana.com/api/1.0/users/me",
                    data: "{}", 
                    contentType: "application/x-www-form-urlencoded; charset=utf-8",
                    dataType: "jsonp",
                    success: function (data) {


                        alert(data);

                    },
                    error: function (msg, url, line) {
                        alert('error trapped in error: function(msg, url, line)');
                        alert('msg = ' + msg + ', url = ' + url + ', line = ' + line);

                    }
                });
        });

    });

私は ajax() メソッドについて多くのことを読みましたが、データ、dataType など、このメソッドのいくつかのオプション パラメーターをまだ把握しています (これはクロスドメイン リクエストであるため、jsonp を使用しました)。
誰かが Asana API から情報を正常に取得するのを手伝ってくれませんか?

4

2 に答える 2

1

Asana API は現在 JSONP をサポートしていないように見えますが、将来的にサポートするようになり、認証を行う必要がある場合は、以下のコードでそれを行うことができます。

$.ajax( {
  url : 'https://app.asana.com/api/1.0/users/me',
  dataType : 'jsonp',
  beforeSend : function(xhr) {
      xhr.setRequestHeader('Authorization', 'Basic ' + btoa(API_KEY + ":"));

  }
);

関数はbtoabase64 にエンコードしますが、すべてのブラウザーでサポートされているわけではないため、古いブラウザーをサポートする必要がある場合は、他のライブラリを使用する必要がある場合があります。

アップデート

ユーザー名は、jQuery でエンコーディングや設定ヘッダーを使用せずに直接設定することもできます。

 $.ajax( {
  url : 'https://app.asana.com/api/1.0/users/me',
  dataType : 'jsonp',
  username : API_KEY
 });

JS を使用して API にアクセスする場合、API_KEY はクリア テキストでページに表示されます。おそらく、これはサーバー側で行う必要があります。

于 2012-07-02T01:37:17.917 に答える
1

少し調べてみたところ、現在 Asana の API は JSONP を返すことをサポートしていないようです。

さらに、私自身のいくつかの調査の後、CORSもサポートしていないように見えるため、クロスオリジンXHRは問題外に見えます. 確かに、私は適切な認証でテストしていませんでした。彼らのサービスは、承認された要求にのみ CORS ヘッダーを付与するように構成されている可能性があります。

または、サーバー側のスクリプトで API に対して一般的な Web リクエストを発行し、結果を UI にプロキシすることもできます。

于 2012-07-01T06:34:15.853 に答える