第二个ajax请求后的xmlhttp.responseText

时间:2013-04-24 11:35:41

标签: php javascript ajax ajax-request

我正在使用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=

只有在被承认后才能执行..

1 个答案:

答案 0 :(得分:0)

在考虑了moonwave99的评论之后,我最终得到了一个不同的解决方案......

首先我发现,条件检查失败了,因为在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';
    }