1

我正在为自己编写一个报价系统。

我有这个报价网页,它确实:
a)向客户发送一封电子邮件(完成),其中包含引用的项目
b)在谷歌电子表格中创建记录(完成)
c)在asana中创建一个任务(失败)

在过去的 2 天里,我一直在浏览和阅读我能找到的所有内容,但解决方案从我的脑海中消失了。

这是CURL代码,它工作得很好

curl -H "Authorization: Bearer 0/7alotofnumbers" \
   https://app.asana.com/api/1.0/tasks \
   -d "projects=83694179XXXXXX" \
   -d "tags[0]=269280227XXXXXX" \
   -d "assignee=sales@atmysite.com.mx" \
   -d "due_on=2017-02-09" \
   -d "name=testing with curl" \
   -d "notes=it works just as expected" \
   -d "followers[0]=myself@atmysite.com.mx"

现在,我将 WORKS 的 CURL 命令翻译成 asanataskcreate.coffee:

$.ajax
  url: 'https://app.asana.com/api/1.0/tasks'
  beforeSend: (xhr) ->
    xhr.setRequestHeader 'Authorization', 'Bearer 0/7alotofnumbers'
    return
  contentType: 'application/json'
  method: 'get'
  data:
    projects: [ 83694179XXXXXX ]
    tags: [ 269280227XXXXXX ]
    assignee: 'sales@atmysite.com.mx'
    due_on: '2017-02-09'
    name: 'testing with js ajax'
    notes: 'it does not work'
    followers: [ 'myself@atmysite.com.mx' ]

变成 asanataskcreate.js:

$.ajax({
  url: 'https://app.asana.com/api/1.0/tasks',
  beforeSend: function(xhr) {
    xhr.setRequestHeader('Authorization', 'Bearer 0/7alotofnumbers');
  },
  contentType: 'application/json',
  method: 'get',
  data: {
    projects: [83694179XXXXXX],
    tags: [269280227XXXXXX],
    assignee: 'sales@atmysite.com.mx',
    due_on: '2017-02-28',
    name: 'testing with js ajax',
    notes: 'it does not work',
    followers: ['myself@atmysite.com.mx']
  }
});

而且,失败:(

好的,我已经尝试过:
a)方法:'post' 和 'get'
b)放置,删除项目、标签和关注者处的 '[]'

在“控制台”中 Chrome devtools 的帮助下,我收到以下消息:

加载资源失败:服务器响应状态为 400(错误请求)

XMLHttpRequest 无法加载https://app.asana.com/api/1.0/tasks?projects%5B%5D=836941797XXXXXX&tags%5B%5…&notes=it+does+not+work&followers%5B%5D=myself%40atmysite .com.mx。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问来源“http://atmysite.com.mx”。响应的 HTTP 状态代码为 400。

现在,在 DevTools 中,当检查来自 asana 的 XHR 响应时,我得到的是:

消息:“您应该指定工作区、项目、标签、部分之一”

从代码中可以看出,定义了一个项目 id,但是在 JS 中失败并且在 curl 中有效。

分析为什么 curl 和 ajax 中的“项目”会失败,区别在于:

curl: projects=83694179XXXXXX
js ajax: projects%5B%5D=836941797XXXXXX ==> projects[]=836941797XXXXXX

我做错了什么?

4

1 回答 1

1

下面是一个创建 Asana 任务的 Ajax 请求示例:

$.ajax({
  beforeSend: function (xhr) { 
    xhr.setRequestHeader("Authorization", "Bearer " + "0/0123..."); 
  }, 
  url: "https://app.asana.com/api/1.0/tasks", 
  method: 'POST',
  data: {projects:123456789, name: "ajax created task"},
});

不确定您编译的 Ajax 代码中有多少是错误的。您肯定需要使用POST请求来创建新任务。数据值不应在数组中。您可能不需要列出contentType,因为默认值会起作用。根据我的示例,您应该能够使您的代码正常工作。

您还应该知道,通过使用 Ajax,您将在客户端中公开您的个人访问令牌。如果您在您的帐户上看到任何可疑内容,您可能需要删除该 PAT。

于 2017-02-11T01:03:52.077 回答