2017-08-04 71 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() 
     } 
     }) 
    })