Podio - 通过AJAX PUT更新项目字段

时间:2017-03-17 21:10:26

标签: ajax podio

我需要通过来自我构建的外部应用程序的AJAX调用来更新Podio项目字段值。我能够完成流程的第一部分 - 获取OAuth令牌 - 但我无法确定如何形成PUT请求后续行动......

这是我到目前为止所做的事情:

$.ajax({
    type:'POST',
    url:'https://podio.com/oauth/token',
    data: {
        'grant_type': 'app',
        'app_id': '1234',
        'app_token': '1234',
        'client_id': 'myidcode',
        'redirect_uri': 'redirect.com',
        'client_secret': '1234secret4321'
    }
}).done(function(response){
    $.ajax({
        type:'PUT',
        url:'https://api.podio.com/item/${item_id}/value/${field_id}',
        beforeSend: function (xhr) {
            xhr.setRequestHeader('Authorization', 'OAuth2 ' + response.access_token)
        },
        data: {
            values: "doofus@test.com"
        }
    }).done(function(){
        console.log("Ok!")
    })
})

第一个AJAX调用成功 - 我在响应中返回了我的身份验证令牌。但是,第二次AJAX调用会导致XMLHttpRequest cannot load https://api.podio.com/item/1/value/142236262. Response for preflight has invalid HTTP status code 400错误。

我确信这是一个简单的解决方案,而且我已经接近完成我需要做的事情......对PUT电话的任何澄清都会非常感激。也许网址不正确?

注意 Podio文档提供了对此步骤的一些见解:

'所有这些身份验证方法都将为您提供访问令牌。您将在API的任何后续请求中包含此访问令牌。您将通过包含带有访问令牌的HTTP标头来执行此操作,如下所示: 授权:OAuth2 ACCESS_TOKEN ACCESS_TOKEN应替换为您获得的实际访问令牌。'

像这样设置AJAX标题:

headers: {
    'Authorization': response.access_token
}

headers: {
    'Authorization': 'OAuth2 ' + response.access_token
}

也会导致预检错误。

2 个答案:

答案 0 :(得分:1)

我的问题的第一部分是这个请求需要来自https。一旦我清除了它,另一个问题是我忘记设置内容类型。

$.ajax({
    type:'PUT',
    beforeSend: function (xhr) {
        xhr.setRequestHeader('Authorization', 'OAuth2 ' + response.access_token)
    },
    contentType: 'application/json',
    url:'https://api.podio.com/item/654321/value/12345',
    data: JSON.stringify({'value': 'new_value'})
}).done(function(response){
    console.log(response)
}).fail(function(error){
    console.log(error)
})

修补了它。

答案 1 :(得分:0)

您应该查看Podio JS客户端(以及其他客户端以防万一,如果您想用其他语言试用它)

所有客户:https://developers.podio.com/clients
JS客户:http://podio.github.io/podio-js/
在js客户端发出请求:http://podio.github.io/podio-js/api-requests/