【问题标题】:Creating a task in Asana with JS (fail) and CURL (work)使用 JS(失败)和 CURL(工作)在 Asana 中创建任务
【发布时间】:2017-06-28 11:40:48
【问题描述】:

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

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

在过去的 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 中的 'projects' 有效,而在 ajax 中失败,区别在于:

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

我做错了什么?

【问题讨论】:

    标签: javascript ajax curl asana asana-api


    【解决方案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。

    【讨论】:

    • 感谢杰夫,但它也失败了。同时我正在使用 CURL 方法。为了避免挑剔,我混淆了 php 代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多