AJAX刷新中的延迟/不一致

时间:2014-05-08 23:32:36

标签: javascript php jquery mysql ajax

我一直致力于一个允许用户提交内容并拥有该内容的网络应用,而今天我一直看到一些意想不到的结果而没有做出任何重大改变。

应用程序的基本功能是用户从网页index.php上的表单提交一些POST数据,然后运行PHP脚本submit.php以将数据添加到表中的表数据库。同时,index.php上的Jquery函数正在通过脚本load.php刷新包含从表中选择的行的div的内容,并且该函数每秒调用一次。

问题在于,今天突然之间,我看到数据添加到表格之间以及它在Jquery刷新的div中显示的时间很长(10-20分钟)。此外,div在其现有内容和带有附加值的新数据集之间来回闪烁,就像它在load.php的实时结果和之前对同一脚本的调用之间交替一样。

我在调用submit.php之前和之后检查了MySQL数据库,并且我已经确认数据一旦提交就立即添加,所以问题与{{1}的方式有关从Jquery调用脚本。

这才刚刚开始。奇怪的是,我已经看到了我之前构建的另一个AJAX应用程序的相同行为,以测试相同的I / O机制,并且我在一周内没有触及该应用程序的代码。我的系统管理员说服务器没有任何变化可以解决这个问题。

我已发布所有必要信息的所有代码,但我认为问题出在load.phpload.php中的javascript updateMyContent()

index.php     

index.php

<script language="JavaScript"> setInterval("updateMyContent();",1000); $(function(){ updateMyContent=function(){ $('#refreshData').load("./module/load.php").fadeIn("slow"); } }); </script> <script language="JavaScript"> $(document).ready(function(){ $('#submitForm').on('submit',function(e){ $.ajax({ url:'./module/submit.php', data:$('#submitForm').serialize(), type:'POST', success:function(data){ console.log(data); $("#success").show().fadeOut(5000); $('#textID').val(''); }, error:function(data){ $("#error").show().fadeOut(5000); } }); e.preventDefault(); }); }); </script> <div style="float: right; top: 0; " id="submitDiv"> <form id="submitForm" action="" method="post"> <textarea id="textID" type="text" name="content" rows=5></textarea> <input type="submit" value="send" name="submit"/> </form> <br> <span id="error" style="display: none; color:#F00">error</span> <span id="success" style="display:none; color:#0C0">success</span> </div> <div style="float: center;" id="refreshData"></div>

submit.php

<?php if(isset($_POST['content'])) { $content=$_POST['content']; $dsn="mysql:host=someserver.net;dbname=thisdb;charset=utf8"; $db=new PDO($dsn,'thisdb','password'); $insertSQL="insert into submission (content) values (?)"; $stmt=$db->prepare($insertSQL); $stmt->execute(array($content)); } else { echo "FAIL!"; } ?>

load.php

1 个答案:

答案 0 :(得分:3)

返回Ajax响应花了这么长时间的问题可能是表submissions已经增长。而不是每一次加载所有提交,只向div添加新的提交。即跟踪收到的最后一个id并在查询中使用它,以便where子句是有限的。

  

此外,div在其现有内容和带有附加值的新数据集之间来回闪烁,就好像它在load.php的实时结果和先前对同一脚本的调用之间交替。

Ajax响应可以像其他任何东西一样由浏览器缓存。为了防止这种情况,您可以:

  1. 在处理请求的页面中放置no-cache标头,以防止浏览器缓存Ajax响应。 IE特别顽固,需要最有力的标题。

  2. 在Ajax请求中添加一个随机数的参数,以使每个请求都是唯一的。

  3. 告诉JQuery防止缓存(它只为你做#2)。使用$.ajaxSetup ({ cache: false });或为cache: false,

  4. 的每次调用添加$.ajax属性