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

Podio - update item field via AJAX PUT

我需要通过 AJAX 从我构建的外部应用调用来更新跑道项目字段值。我能够完成流程的第一部分 - 获取 OAuth 令牌 - 但我无法弄清楚如何形成 PUT 请求 follow-up...

这是我目前所做的:

$.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 调用做出任何说明,我们将不胜感激。也许 url 不正确?

备注 跑道文档对此步骤提供了一些见解:

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

像这样设置 AJAX header:

headers: {
    'Authorization': response.access_token
}

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

也会导致预检错误。

你应该看看 Podio JS 客户端(以及其他客户端,以防你想用另一种语言尝试它)

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

我的问题的第一部分是此请求需要源自 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)
})

已修复。