- 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/
我正在尝试制作一个程序,显示飞机到达和起飞的时间表,然后要求用户在 C 中输入时间。然后程序将找到最接近输入时间的到达时间用户。问题是它没有按预期工作,并且给我一个错误的到达时间,甚至不接近输入的时间
我有一个不断填充新信息行的 Excel 表,其中一列与联系客户的日期(有时为空 - 无需输入日期)相关,如果在 10 内没有收到回复从那以后的几天,我们必须发送提醒,如果过了 17 天,我们必须取消订
实际到达很简单,标签进入接收器天线范围,但是偏离是造成问题的原因。 首先,我们了解一些有关设置的信息。 标签: 它们以433Mhz的速度工作,每1.5秒钟发送一次“心跳”,移动时进入传输突发模式,这种
我构建了这段代码来从 URL 获取 XML我使用了 AsyncTask,当到达 getInputStream() 点时,半身应用程序仍然崩溃 重点是我想从 url 获取 XML 作为字符串。 我尝试不
所以我有一个 TDBGrid,我的目的是搜索 DBGrid 的 Fieldname 并将其与我的编辑的 Text 属性进行比较,如果它们相等,则 我想将找到匹配项的整列写入列表框。 通过带有 fiel
我会写得非常简单,因为实际的修复并不比我不理解的实际设计重要。似乎一旦我的 @RequestBody 命中 @Controller,有关 subtype 的信息就会丢失。 假设我们有: class A
所以我正在做这个简单的动态编程问题,关于达到 n一次只能走 1 或 2 步。我知道答案基本上是一个斐波那契序列,答案是:达到n-2的步骤数+ 到达 n-1 的步数. T(n) = T(n-1) +
(function start (){ $('.bar').each(function(i){ var $bar = $(this); $(this).append('')
我有一个程序,我在启动它之前要求用户输入。 public static void main(String args[]) { String database = JOptionPane.sho
就是这样,我必须在提交按钮上有一张图片,但它根本没有出现。 我希望它看起来像这样: 现在看到我的是这样的,我不明白为什么它没有出现在页面上。 HTML CSS #sognu { bac
click here 点击后重定向至 xyz.com/#contact, 现在我想获得div #abc的顶部位置 //set the value as a variable, and remove t
here is a fiddle to know where I am starting from 我要解决的问题涉及对单个 html 文件的内容进行“分页”,以一种将它们一次锁定在一个部分中的方式。
是否可以在传递页面部分时运行 javascript 函数?我想要实现的是类似于 Twitter Bootstrap 的 scrollspy。 最佳答案 您可以使用 waypoints 插件: http
我有一个可以动态调整其大小的 iframe。我通过父页面上的发布消息和监听器解决了这个问题,因此每次 iframe 的内容发生变化时,iframe 的大小也会发生变化,并且永远不会有滚动条。 在 if
我试图让我的导航栏在到达我在网站下方设置的 anchor 时变得透明。 这是我的HTML Home About Logo W
我写了一个简单的程序来管理姓名列表(下面是程序的一部分)。我希望函数“choice()”结束并返回到 main()——从而结束程序——当用户对变量“option”的输入为 4 时。然而,choice(
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
代码片段在 while 循环后有一个 EOF,之后必须再次重新打开文件 - fopen 被重用。我的问题是是否有办法避免这种笨拙的 fopen 双重使用或以某种方式不使用 EOF? if (!(f=f
从这个页面: http://www.beta.inegi.org.mx/app/buscador/default.html?q=e15a61a 我正在尝试检索此网址: http://www.beta.
我使用维基百科的 API 来获取有关页面的信息。API 给我这样的 JSON: "query":{ "pages":{ "188791":{ "pageid":18879
我是一名优秀的程序员,十分优秀!