2017-08-04 72 views
0

我正在尝试使用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 
    }) 
}) 

回答

0

如果我正确理解你的问题,我相信你想要做以下(假设入口是一个字符串):

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 } 
}) 
+0

谢谢,亚历克斯 我想你有什么在这里,有一些它的变化沿,但保留接收空对象。 –

+0

终于明白了,你帮助我指出了正确的方向。谢谢! 以下是我的AJAX调用中的代码: data:JSON.stringify({query:$ entry:String!){repository(name:$ entry,owner:“*****”) { pullRequests(去年:100){ 节点{ 状态 headRepository { 所有者{ 登录 } } } } } }', 变量:{ “项”:$('#进入').val() } –

+0

完美,很高兴你有它工作,我从来没有直接在ajax调用中使用它,但这是有道理的。 –

0

对于任何具有相同问题的人,这里是代码的样子就像当我终于得到它的工作:

 $('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() 
     } 
     }) 
    })