javascript - 使用 JS(失败)和 CURL(工作)在 Asana 中创建任务

标签 javascript ajax curl asana asana-api

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

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

在过去的两天里,我一直在网上冲浪并阅读我能找到的所有内容,但解决方案却从我的脑海中消失了。

这是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"

现在,我将可用的 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 开发工具的帮助下,我收到以下消息:

Failed to load resource: the server responded with a status of 400 (Bad Request)

XMLHttpRequest cannot load 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. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://atmysite.com.mx' is therefore not allowed access. The response had HTTP status code 400.

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

message: "You should specify one of workspace, project, tag, section"

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

分析为什么'projects'在curl中有效而在ajax中失败,区别在于:

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

我做错了什么?

最佳答案

以下是创建 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,您会在客户端中公开您的个人访问 token 。如果您发现帐户中有任何可疑内容,您可能需要删除该 PAT。

关于javascript - 使用 JS(失败)和 CURL(工作)在 Asana 中创建任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42154047/

相关文章:

javascript - 2张图片同时显示

javascript - Firefox 扩展和 XUL : get page source code

php - 使用 cURL 的 Bug 订阅 instagram API

javascript - 如何检测div中的单个单词

javascript - 键名中的 MongoDB 点 (.)

javascript - 在多个 PHP 页面上使用来自 AJAX 函数的填充变量更新 SQL 查询

c++ - 如何解决 C++Builder 中的链接器错误 "LIBCURL.LIB contains invalid OMF record, type 0x21 (possibly COFF) "?

php - 执行 cURL 后的脚本不起作用。页面不断重新加载

javascript - 使用ajax加载onsen-ui内容

JavaScript Ajax 保存结果