2012-07-01 29 views
0

我想通過JQuery.ajax()方法從Asana API中獲取信息。但沒有返回所需的結果,或顯示錯誤。
這是在JavaScript我的部分代碼:
使用jQuery ajax()方法檢索RESTful數據

$(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()方法,但仍處於這種方法想通了一些選項的參數,如數據的數據類型(因爲這是跨域請求,我用jsonp)。
有人可以幫助成功從Asana API拉動信息嗎?

+0

我不相信他們的服務默認返回jsonp。請檢查文檔並確保它支持jsonp。我懷疑有一些querystring選項可以做到這一點。 –

+0

您是否使用Firebug for Firefox等調試工具? Chrome也內置了一個。通過這種方式,您實際上可以看到HTTP請求消失,並會顯示狀態碼,您可以查看響應的標題和正文。 – Despertar

+0

看起來像那個API調用,需要授權和你不提供任何 – tsukimi

回答

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 + ":")); 

    } 
); 

btoa功能編碼爲base64但其not supported所有的瀏覽器,所以你可能需要使用一些其他的圖書館,如果你需要支持舊的瀏覽器。

更新

的用戶名的名稱,也可以直接用jQuery設置沒有編碼或設置標頭。

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

當使用JS訪問您的API_KEY將是有明文text.Maybe頁面這個東西應該在服務器端完成的API。

+0

非常感謝!它有助於。 – lxx22

1

經過一番研究,它看起來不像Asana的API支持現在返回JSONP。

此外,在對我自己進行了一些探索之後,它看起來並不像他們支持CORS,所以跨源XHR看起來沒有問題。當然,我沒有使用正確的身份驗證進行測試,並且他們的服務可能被配置爲只將CORS頭授權給被授權的請求。

也可以讓服務器端腳本向API發出通用Web請求,並將結果代理回UI。

+0

「將CORS添加到您的服務器響應以授權針對Asana API服務的XHR請求」?你的意思是添加「jQuery.support.cors = true」,否則我沒有明白你的意思是添加CORS。非常感謝。 – lxx22

+0

對不起,我很困惑。CORS是它們的服務可以設置的標頭,允許瀏覽器針對另一個域執行XHR請求。但在我看來,他們也不支持這一點。 –