繁体   English   中英

第二个ajax请求后的xmlhttp.responseText

[英]xmlhttp.responseText after second 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以检查响应是否已更改,但是响应保持不变。例如,如果无法识别他,我将同时获得两个响应“ 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=

仅在他被承认后才被处决。

在考虑了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';
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM