使用JS(失败)和CURL(工作)

时间:2017-02-10 07:45:10

标签: javascript ajax curl asana asana-api

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

我有这个引用的网页,它有: a)使用引用的项目向客户发送电子邮件(完成) b)在谷歌电子表格中创建一条记录(完成) c)在体式(失败)中创建任务

在过去的两天里,我一直在冲浪和阅读所有我能找到的东西,但是解决方案从我的脑海里跳过,所以我问你们的问题。

这是 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)放置,删除proyects,标签和关注者的'[]'

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

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中,当检查来自体式的XHR响应时,这就是我得到的:

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

正如您可以从代码中看到的那样,定义了一个项目ID,但是在JS中失败并且在curl中工作。

分析curl工作和ajax中'项目'的原因失败,区别在于:

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

任何人都知道我做错了什么。

提前,谢谢您的时间和帮助

1 个答案:

答案 0 :(得分: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。