调用文件名的if语句的AJAX请求


AJAX request with if statement for filename called

我正在使用AJAX来刷新每个问题。我想知道是否有一种简单的方法可以使用相同的AJAX调用,但每次都在文件名的末尾添加一个数字,而不是对测验中的每个不同的问题使用单独的AJAX调用。

这是基本的AJAX请求:
function nextQuestion()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("wordbank").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","question2.php",true);
xmlhttp.send();
}
如您所见,GET请求提取一个名为question2.php的文件
xmlhttp.open("GET","question2.php",true);

这只是一个临时文件,我真正想做的是这样的:

xmlhttp.open("GET","question" i++ ".php",true);

好吧,我说得不好,但我不确定这是否是最好的方法。从本质上讲,我想让我的按钮绑定到nextQuestion()函数,但我想找到一种方法来生成下一个文件名基于你当前的。

这可能吗?

另一个想法是给每个页面上的按钮一个不同的ID,并让nextQuestion()函数获取该ID并使用它来生成下一个文件。例如,如果你在问题2,按钮将有一个ID为question2。ajax将取最后一位数字(2)并将其加1,因此调用的文件名将是question3.php -这就是它如何知道移动到下一个问题。

现在你可以在任何按钮上放置ID,并让它带你到正确的页面。

你JS

function nextQuestion(buttonID)
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("wordbank").innerHTML=xmlhttp.responseText;
    }
  }
var splitID = buttonID.split('_');
var questionID = splitID.pop();
xmlhttp.open("GET","question" + questionID + ".php",true);
xmlhttp.send();
}

你的按钮

<button id="question_2" onClick="nextQuestion(this.id)">Go To Question 2</button>

<button id="question_14" onClick="nextQuestion(this.id)">Go To Question 14</button>

用当前索引创建一个字符串

xmlhttp.open("GET","question" +  i + ".php",true);

您可以为当前任务设置一个全局变量,并执行如下操作:

var current_quest=1; 
function nextQuestion() 
{
    ...
    xmlhttp.open("GET","question"+current_quest+".php",true);
    xmlhttp.send();
    window.current_quest++;
    ... 
}