如何使用变量发送GraphQL AJAX查询?

Jon*_*ing 3 jquery json github-api graphql

我正在尝试使用GraphQL对GitHub进行API调用,我已经能够使用静态graphQL调用成功调用数据,但是我在调​​用中输入变量(var条目)时遇到问题,这样我就可以更改调用在用户将在Web应用程序中提供的输入上.

我正在使用AJAX来传递授权令牌.此外,除非查询是JSON字符串化,否则调用不起作用(否则将获得400错误).

JSON Stringify似乎将变量'superQuery'的名称变为字符串,而不是将'superQuery'的值转换为字符串.

如何使用可根据用户输入更改的变量发送graphQL查询?

PS相对于web开发的noob,对任何超级明显的错误道歉.

这是我到目前为止:

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
  })
})
Run Code Online (Sandbox Code Playgroud)

Jon*_*ing 6

对于任何有同样问题的人来说,这就是我最终使用它时代码的样子:

      $('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()
        }
      })
    })
Run Code Online (Sandbox Code Playgroud)


Ale*_*x K 0

如果我正确理解你的问题,我相信你想要执行以下操作(假设条目是一个字符串):

 var superQuery = `query repository($entry: String)
         repository(entry: $entry) {
            pullRequests(last: 100) {
               nodes {
                 state
                 headRepository {
                   owner {
                     login
                    } 
                  } 
                } 
             }
          }`
Run Code Online (Sandbox Code Playgroud)

然后是你的数据:

data: JSON.stringify({
   query: superQuery,
   variables: { "entry": $('#entry').val() }
})
Run Code Online (Sandbox Code Playgroud)