2016-11-30 63 views
0

我有一個訪問Asana API的PHP應用程序。我能夠在Asana中創建一個項目。但是,對API類的ajax調用正在返回一個readystate = 0。Asana項目已創建,但ajax readystate 0

雖然在螢火蟲故障排除我也注意到,網絡控制檯有一個302,400(??)和200狀態代碼。我認爲400狀態代碼與無效請求或格式不正確的網址有關,但是無論如何都會創建該項目。

有什麼想法?

更新:更多信息。

我有一個Ajax調用一個PHP文件,實習生在調用API服務之前調用Asana API來獲取驗證碼和令牌。 我相信我得到了CORS警告,因此readystate = 0和400錯誤。然而,因爲我的腳本的其餘部分繼續使用該令牌,它無論如何都會插入記錄。但是,在令牌過期後(3600秒),現在我無法插入記錄。我知道如果我直接調用php文件,它可以在沒有CORS錯誤的情況下運行。

$.ajax({ 
        type: 'POST', 
        url: "oa/asana.php", 
        data: {apiprovider:"asana",type:"addnewproject",notes:"notes",name:"name",id:"id",resource:"projects"}, 
        //dataType:"json", 
        //contentType: "application/json", 
        success: function(data) { 

          console.log(data); 
        }, 
        error: function(error) 
          { 
           console.log("asana api error"); 
           console.log(JSON.stringify(error)) ; 
        }, 
        async:true 
      }); 

我的php代碼看起來像這樣。

...$asana = new AsanaAuth(API_KEY,API_SECRET,callbackUrl); 

    if (!isset($_GET['code'])) { 
      $url = $asana->getAuthorizeUrl(); 
      header('Location:' . $url); 
    } else { 
      $asana->getAccessToken($_GET['code']); 
      if ($asana->hasError()) { 
        echo 'Error response code: ' . $asana->responseCode; 
      } 
      else { 
        echo $asana->response; 
      } 
    } 

在Ajax調用之外有更好的方法嗎?

回答

0

確定這裏是我如何修復它。部分我的理解錯了,我做了一個錯誤的假設。

這完全是基於我的應用程序的需要,這可能並不適用於所有。

我有一個設置頁面,用戶點擊Asana應用程序授權連接。這不是一個Ajax調用,而是一個超鏈接到一個文件,這也是我的重定向uri。在這個文件中,我檢查用戶是否已經授權,如果不是,我調用授權,獲取令牌並將刷新令牌存儲在數據庫中以備將來使用。

在我的應用程序的其他部分,當用戶點擊創建asana項目時,如果訪問令牌已過期,我會檢查它的有效性,我會刷新並再次獲取另一個令牌。

此前,我試圖從一個頁面調用它(在正常的用戶流程中永遠不會發生 - 在我的應用程序中)。所以現在沒有Ajax調用授權,但調用刷新令牌,Asana API端點通過Ajax,它們工作正常。

希望這可以幫助未來的人。

相關問題