2017-11-29 24 views
0

クイズで正しい答えが得られたら、次のURLに移動する必要があります。私は大学のサーバーから質問を受けてクイズゲームを作成しています。人が正しいとき、ゲームはXMLHttpRequestを使ってサーバー上で次の質問を受け取ります。 私はここで何とか 'nextURL'をここに置くことができますか、そのような用語はありませんか?ローカルサーバーの次のURLに移動

function Question() { 
let quizQuestion = new window.XMLHttpRequest() 
quizQuestion.open('GET', 'http://vhost3.lnu.se:20080/question/1') 
quizQuestion.onload = function() { 
    let ourData = JSON.parse(quizQuestion.responseText) 
    let questionDiv = document.querySelector('#question') 
    questionDiv.innerText = ourData.question 
} 
quizQuestion.send() 
answer() 
} 

function answer() { 
    let quizQuestion = new window.XMLHttpRequest() 
    let answerDiv = document.querySelector('#answer') 
    let button = document.createElement('button') 
    button.type = 'button' 
    button.setAttribute('id', 'send') 
    button.innerText = 'Answer' 
    answerDiv.appendChild(button) 

button.addEventListener('click', function() { 
    quizQuestion.open('POST', 'http://vhost3.lnu.se:20080/answer/1') 
    quizQuestion.setRequestHeader('Content-type', 'application/json') 
    quizQuestion.send(JSON.stringify({answer: inputText.value})) 

    quizQuestion.onreadystatechange = function() { 
    console.log(quizQuestion.response) 
    let ourAnswer = JSON.parse(quizQuestion.responseText) 
    let answerDiv = document.querySelector('#answer') 
    answerDiv.innerText = ourAnswer.message 
    } 
    }) 
} 

({answer: inputText.value})の値が正しいかどうだから私はこのケースでは、あなたが書いたものに基づいquizQuestion.open('GET', 'http://vhost3.lnu.se:20080/question/21')

答えて

1

にある次の質問に行きたい、それが「次のURL」のように見えますどの瞬間でもあなたが与えられたリストの次に来るでしょう。正しい答えの後に適切なものを取り出す方法はあなた次第です。

課題の質問番号が非順次的である(あなたの例では質問1から質問21に移動する)と、質問は繰り返されないものとします。サーバーの必要な順番で質問のリストがありますか?リストが配列内にある場合は、現在の質問のインデックスに基づいてリストにアクセスできますか?

質問のリストが既にわかっている場合は、自分のコードでこれを実行できます。あなたは配列にあなたの質問の番号を入れていると、現在の質問番号を格納し、そのよう:

let questionNums = [1,21,14,9,6,23] 
let currQuestionNum = questionNums[0] 

これは、あなたが次に

'http://vhost3.lnu.se:20080/question/' + currQuestionNum.toString(). 

、ときのように、あなたのベースURLに所望の質問番号を連結することができますあなたは答えが正しければ、あなたは配列内の次の質問に移動することができますチェックしました:あなたは変更する必要があります、

if (questionNums.indexOf(currQuestionNum)+1 != questionNums.length){ 
    currQuestionNum = questionNums[questionNums.indexOf(currQuestionNum)+1] 
} 
else{ 
    //end the quiz 
} 

は、上記の連結の例でこれを使用するように質問と回答の機能はパラメータとして、質問番号を受け入れます:

function Question (questionNum) { 
let quizQuestion = new window.XMLHttpRequest() 
quizQuestion.open('GET', 'http://vhost3.lnu.se:20080/question/'+questionNum) 
quizQuestion.onload = function() { 
    let ourData = JSON.parse(quizQuestion.responseText) 
    let questionDiv = document.querySelector('#question') 
    questionDiv.innerText = ourData.question 
} 
quizQuestion.send() 
answer(questionNum) 
} 

function answer (questionNum) { 
    let quizQuestion = new window.XMLHttpRequest() 
    let answerDiv = document.querySelector('#answer') 
    //Local answerNum variable 
    let answerNum = questionNum 
    let button = document.createElement('button') 
    button.type = 'button' 
    button.setAttribute('id', 'send') 
    button.innerText = 'Answer' 
    answerDiv.appendChild(button) 

button.addEventListener('click', function() { 
    quizQuestion.open('POST', 'http://vhost3.lnu.se:20080/answer/'+answerNum) 
    quizQuestion.setRequestHeader('Content-type', 'application/json') 
    quizQuestion.send(JSON.stringify({answer: inputText.value})) 

    quizQuestion.onreadystatechange = function() { 
    console.log(quizQuestion.response) 
    let ourAnswer = JSON.parse(quizQuestion.responseText) 
    let answerDiv = document.querySelector('#answer') 
    answerDiv.innerText = ourAnswer.message 
    } 
    }) 
} 

注ローカルanswerNum変数 - 匿名関数の前にquesitonNum変更がclickイベントで呼び出された場合、それは、値がされませんので、これが追加されます影響を受けた。

+0

この割り当ての仕組みに興味がある人は:[Hurl.it]のようなサービスを使ってOPの[最初のURL](http://vhost3.lnu.se:20080/question/1)に適切なリクエストを送信してみてください。 (https://www.hurl.it/)。 – B1SeeMore

関連する問題