2016-11-30 40 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,它们工作正常。

希望这可以帮助未来的人。

相关问题