Я намеревался создать динамичный веб-сайт, который обеспечит викторину vocab. Я модифицировал некоторые из примеров w3school, но это не сработало.
<?php
?>
<script>
//var vocabid;
var ans;
function getnumber(str)
{
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)
{
return xmlhttp.responseText;
}
}
xmlhttp.open("GET","getnumber.php?q="+str,true);
xmlhttp.send();
}
function getvocab(str)
{
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("vocab").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getvocab.php?q="+str,true);
xmlhttp.send();
}
function getpart(str)
{
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("part").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getpart.php?q="+str,true);
xmlhttp.send();
}
function getchi(str)
{
var inner_ans
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)
{
inner_ans=xmlhttp.responseText;
}
}
xmlhttp.open("GET","getchi.php?q="+str,true);
xmlhttp.send();
return inner_ans;
}
function loadvocab()
{
//vocabid=Math.floor((Math.random()*2)+1);
vocabid=getnumber();
//vocabid= document.getElementById("num_result").value;
getvocab(vocabid);
getpart(document.getElementById("num_result").value);
var ans=getchi(vocabid);
//document.getElementById('number').innerHTML = document.getElementById("num_result").value;
//document.write(document.getElementById("num_box").value;);
//document.write(ans);
}
</script>
</head>
<body>
<div name="vocab" style="width:300px; top:10px ; background-color:rgb(255,0,255);display:inline-block; position:relative;">
vocab
<span id="vocab"></span>
</div>
<div name="part" style="width:100px;position:relative;background-color:rgb(255,0,255);display:inline-block;">
pt. of speech
<span id="part"></span>
</div>
<div name="chi" style="width:100px;position:relative;background-color:rgb(255,0,255);display:inline-block;">
chi
<span id="chi"></span>
</div>
<br>
<div name="ans_box" style="width:100px;position:relative;background-color:rgb(255,0,255);display:inline-block;top:100px;">
<form name="ans">
<input type="text" name="ans_text">
</form>
<span id="number"></span>
</div>
<div name="check" style="width:300px;left:10px; top:100px ; background-color:rgb(255,0,255);display:inline-block; position:relative;" onclick="check_vocab(document.ans.ans_text.value)">
check
<span id="check"></span>
</div>
<font id="num"></font>
<div name="next" style="width:100px;left:10px;position:relative;background-color:rgb(255,0,255);display:inline-block;top:100px; " onclick="loadvocab();">
next
</div>
<div style="width:100px;left:10px;position:relative;background-color:rgb(255,0,255);display:inline-block;top:100px;">
<form name="result">
<span id="txtHint"></span>
<input type="button" onclick=" getpart(1);">
<input type="button" onclick=" getvocab(1);">
<input type="button" onclick=" getchi(1);">
</form>
</div>
<div id="num_box">
</div>
когда щелкнут "следующий" div, он проходит через несколько js-функций и извлекает новые слова из файла доступа. но первый, который будет генерировать случайное число в php, не смог вернуться, переменная просто содержит "undefined". но, как вы можете видеть, он работает в одиночку с кнопками.
позже я попытался, но переменную в текстовом поле и получить ее с помощью js, но для возврата данных в тег "span" требуется 2 щелчка.
может ли ребята помочь выяснить, что произошло, или дать мне предложения?
edit: поддерживает ли поддержка soulion unicode? coz У меня есть некоторые символы Unicode в db.
Ajax-вызовы асинхронны. Когда вы вызываете функцию getNumber, браузер вызывает сервер и ждет ответа. Тем временем браузер продолжает делать вещи и использует неопределенную переменную (vocabid, потому что сервер еще не ответил). Вам необходимо реализовать обратный вызов для вас ajax-вызова.
Пример:
// declare getnumber
function getnumber(okfn) {
// do ajax call and write an onreadystatechange function like this:
xmlhttp.onreadystatechange=function() {
if(xmlhttp.readyState==4 && xmlhttp.status==200) {
okfn(xmlhttp.responseText);
}
}
}
// use getnumber
getnumber(function(resp) {
getvocab(resp);
});
getvocab и другая функция с вызовом ajax также являются асинхронными, поэтому вам нужно снова использовать обратный вызов.