我正在为自己编写一个报价系统。
我有这个报价网页,它确实:
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…¬es=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
我做错了什么?