我正在使用javascript ajax请求和php编写脚本.. 我做一个ajax调用以验证用户是否被识别,并且根据“响应”我想做出第二个ajax请求要么让他做出选择,如果他已经是注册用户,要么显示已提交的选项
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var script = document.createElement('script');
script.innerHTML = xmlhttp.responseText;
document.getElementsByTagName('head')[0].appendChild(script);
removeOnclick();
//document.getElementById("txtHint").innerHTML=
}
}
xmlhttp.open("GET","submit_votes.php?q="+str+string,true);
xmlhttp.send();
}
在我的php端
我有这些线以防他被认可
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_array($result))
{
echo "document.getElementById('".$row['option1']."').className += ' colour1';";
....
}
但是如果他没有被识别我已经设置了这张支票
if (!isset($_GET['option1'])){ //option1 is one of the parameters i pass through "string"
echo "nodata";
}
第一次调用只传递字符串设置为“”
q="+str+string
在第二个调用字符串上设置为option1 = A& option2 = B等等...
问题是,我尝试提醒xmlhttpresponse检查响应是否已被更改,但是resposne保持不变...例如,如果他没有被识别,我会在两个响应中获得“nodata”而如果我刷新页面,他被识别,我将获得document.getElementById('“。$ row ['option1']。”')。className + ='colour1';响应..
我需要这个的原因是因为我想要这个部分
var script = document.createElement('script');
script.innerHTML = xmlhttp.responseText;
document.getElementsByTagName('head')[0].appendChild(script);
removeOnclick();
//document.getElementById("txtHint").innerHTML=
只有在被承认后才能执行..
答案 0 :(得分:0)
首先我发现,条件检查失败了,因为在responseText中有一个额外的空格..所以最初我用过
xmlhttp.responseText.trim();
为了删除不需要的字符...但它仍然感觉不对我将js代码作为字符串从php传回js ...我决定使用json .. 所以在php方面,我使用了json编码
$options = array($row['option1'],$row['option2'],$row['option3'],$row['option4'],$row['option5'],$row['option6'],
$row['option7'],
$row['option8'],
$row['option9'],
$row['option10']
);
echo json_encode($options);
在javascript方面我使用了
var jsObject = JSON.parse(xmlhttp.responseText);
var jslength = jsObject.length;
for (i=0; i<jslength; i++){
document.getElementById(jsObject[i]).className += ' colour';
}