- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果未满足所需结果,是否有任何方法可以让 ajax 调用提取一个值并每 X 秒(或根据用户请求)重复一次,直到达到所述所需结果?
调用的响应以 json 序列化数组的形式呈现。我希望 ajax 调用不断重复,直到 $status_code
为 1
或响应 == "error_bad_api_call"
。
剪掉旧代码
更新:(答案)
我们将调用的 PHP 脚本(有 10% 的机会提供预期结果):
<?php
$retArr = array();
$rand = rand(1, 1000);
if($rand < 100)
{
$retArr["status_code"] = 1;
echo json_encode($retArr);
}
else
{
$retArr["status_code"] = 0;
echo json_encode($retArr);
}
?>
javascript + html:
<html>
<head>
<script src="include/jquery-1.7.2.min.js"></script>
<script src="include/jquery.json-2.3.min.js"></script>
<script type="text/javascript">
//Clean all elements on button click
function dosubmitClean(tries)
{
document.getElementById("resultsHere").innerHTML="";
document.getElementById("temp").innerHTML="";
document.getElementById("tries").innerHTML="";
dosubmit(tries); //Do actual work
}
function dosubmit(tries)
{
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){
var resp = xmlhttp.responseText; //Get response
document.getElementById("temp").innerHTML+="resp: "+xmlhttp.responseText+"<br/>"; //Show in event log
var status_code = $.evalJSON(resp).status_code; //Get status code
document.getElementById("temp").innerHTML+="status_code: "+status_code+"<br/>"; //Show in event log
document.getElementById("temp").innerHTML+="Checking status code <br/>"; //Show in event log
if(status_code == "1"){
document.getElementById("resultsHere").innerHTML+="status_code: is one <br/>"; //Show final result
document.getElementById("temp").innerHTML+="status_code: is one <br/>"; //Show in event log
document.getElementById("tries").innerHTML="Amount of tries: "+tries+"<br/><br/>Event log:<br/>"; //Show amount of tries
}
else{
document.getElementById("temp").innerHTML+="status_code: is NOT one <br/>"; //Show in event log
tries++; //Tries + 1
dosubmit(tries,"someval"); //Loop
}
document.getElementById("temp").innerHTML+="Done checking status code <br/><br/>"; //Show in event log
}
}
xmlhttp.open("GET","json_repeat_php.php",true);
xmlhttp.send();
}
</script>
</head>
<body>
<input type="submit" value="submit" id="postDataSubmit" onClick="dosubmitClean(<?php echo 1; ?>);return false;">
<div id="resultsHere"></div>
<div id="tries"></div>
<div id="temp"></div>
</body>
</html>
示例输出:
status_code: is one
Amount of tries: 2
Event log:
resp: {"status_code":0}
status_code: 0
Checking status code
status_code: is NOT one
Done checking status code
resp: {"status_code":1}
status_code: 1
Checking status code
status_code: is one
Done checking status code
最佳答案
这很简单。您已经有了回调函数,正在等待结果。
现在,不再像现在那样以 html 形式返回结果,而是以 JSON 形式返回结果,这样您就可以在客户端轻松评估它。在 php 代码的 elseif{...}
中包含必要的queueCodes。
这可能是这样的(注意,这只是伪代码!):
your json = { success : 0|1 , resultarray [item,item] /* only if success=1 */ , someMoreInfo : <queueCode> }
if ( success ){
// populate your html with the resulting items
}
else{
//perhaps wait some time, then
// call your ajax function again, with your queuecode as parameter
dosubmit( json.someMoreInfo );
}
并且您的 dosubmit
函数将队列代码发送到您的服务器。
超时可能很有用,无论是在服务器还是客户端,无论哪种方式更适合您。
此外,您可能想查看 JSONP
旁注:在 php 的 elseif 分支中使用开关可能更合适。另外,请尽量避免在 javascript 代码中的换行符上写入 {
,而应始终写入 function(){
或 else{
。这可能会为您节省一些 JavaScript 编译器尝试评估您的代码的麻烦。
示例:
return{
object
}
// returns the object
应该相同,但不一样:
return // comiler will add a ; after your return, thus your object won't be returned
{
object
}
关于php - 进行ajax调用,如果不是想要的结果,则提取一个值,然后不断重复,直到达到想要的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10213280/
我需要在 JavaScript 中的笛卡尔坐标和球坐标之间进行转换。我在论坛上浏览了一下,没有找到我要找的东西。 现在我有这个: this.rho = sqrt((x*x) + (y*y) + (z*
有没有matrix3d可以像这样把矩形变成梯形的?我知道常规的 2d 矩阵变换只能以平行四边形结束,因为您只能有效地倾斜和旋转。 div { width: 300px; height:
关于这个例子(d3.j radial tree node links different sizes),我想知道是否可以在 d3.js 中混合径向树和直线树。 对于我的 jsFiddle 示例:htt
我尽量把标题写得最好,但我不确定如何准确描述这里发生的事情,所以请随时更正。 我想使用 › 直 Angular 引号 (›) 而不是 > 直 Angular 引号 (>),虽然 › 字符比 > 短,但
我正在尝试使用 CSS 创建一个具有圆边的矩形棱柱,如下图所示。 到目前为止,我已经指定了顶部和底部的边界半径。问题是我不知道如何让另一边的左右边缘向内 curl 。因此,拐 Angular 处不应有
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 去年关闭。 社区去年审查了是否重
首先,我刚刚开始学习 HTML 和 CSS。 我想如何使用这段代码: https://codepen.io/martinjkelly/pen/vEOBvL .container { width:
我是一名优秀的程序员,十分优秀!