如何发送带有变量的GraphQL AJAX查询?
问题描述:
我正在尝试使用GraphQL进行GitHub的API调用,我已经能够使用静态graphQL调用成功调用数据,但是我在将一个变量(var条目)放入我的调用中时遇到问题,以便可以更改基于用户在Web应用程序中提供的输入进行调用。如何发送带有变量的GraphQL AJAX查询?
我正在使用AJAX来传递授权令牌。另外,除非查询是JSON字符串化的,否则调用不起作用(否则会得到400错误)。
JSON Stringify似乎将变量'superQuery'的名称转换为字符串,而不是将'superQuery'的值转换为字符串。
如何发送带有可根据用户输入更改的变量的graphQL查询?
P.S.对网页开发的相对低估,对任何超级明显的错误表示歉意。
这是我到目前为止有:
var entry = $('#entry').val()
var superQuery = `{
repository(name: entry, owner: "******") {
pullRequests(last: 100) {
nodes {
state
headRepository {
owner {
login
}
}
}
}
}
}`
.ajax({
method: "POST",
url: "https://api.github.com/graphql",
contentType: "application/json",
headers: {
Authorization: "bearer **********************************"
},
data: JSON.stringify({
query: superQuery
})
})
答
如果我正确理解你的问题,我相信你想要做以下(假设入口是一个字符串):
var superQuery = `query repository($entry: String)
repository(entry: $entry) {
pullRequests(last: 100) {
nodes {
state
headRepository {
owner {
login
}
}
}
}
}`
而且那么对于您的数据:
data: JSON.stringify({
query: superQuery,
variables: { entry: entry }
})
答
对于任何具有相同问题的人,这里是代码的样子就像当我终于得到它的工作:
$('button').click(function() {
event.preventDefault();
var entry = $('#entry').val()
console.log(entry);
$.ajax({
method: "POST",
url: "https://api.github.com/graphql",
contentType: "application/json",
headers: {
Authorization: "bearer ***********"
},
data: JSON.stringify({
query: `query ($entry: String!) {repository(name: $entry,
owner: "*******") { pullRequests(last: 100) {
nodes {
state
headRepository {
owner {
login
}
}
}
}
}
}`,
variables: {
"entry": $('#entry').val()
}
})
})
谢谢,亚历克斯 我想你有什么在这里,有一些它的变化沿,但保留接收空对象。 –
终于明白了,你帮助我指出了正确的方向。谢谢! 以下是我的AJAX调用中的代码: data:JSON.stringify({query:$ entry:String!){repository(name:$ entry,owner:“*****”) { pullRequests(去年:100){ 节点{ 状态 headRepository { 所有者{ 登录 } } } } } }', 变量:{ “项”:$('#进入').val() } –
完美,很高兴你有它工作,我从来没有直接在ajax调用中使用它,但这是有道理的。 –