做了一个ajax在后台查数据, 前台接收转成html赋值给div显示在界面上,返回的数据是对的,赋值过后div值也是对的,显示出来是错的

huang_silu 2016-05-31 10:23:26
做了一个ajax传文件的,在后台上传成功后,查询数据库的最新数据返回,前台接收转成html赋值给div显示在界面上,div显示的内容 是和数据库一样的,在做删除操作完毕后,查询数据返回到前台,返回值是对的,调试时看到给div赋值后div的值也是对 的,界面上会显示正确的值后继续运行就跳到别的js里面了,这个时候界面上显示的值就是错的了,代码应该是在赋值操作完毕后就结束整个查询动作,但是不知道什么原因又开始执行别的代码块,对于同步异步这个概念不是很清晰,是不是界面还没来的及显示出来就被别的动作给终止了,求大神指教啊,我把代码都放到下面,因为不知道是哪块原因,所以把引用了js代码的都贴出来

时间控件代码
 <asp:TextBox ID="txtPlandate" runat="server" class="txtbox" onfocus="new WdatePicker()" CssClass=""></asp:TextBox>    

editor代码
<script id="editor" name="editor" type="text/plain" style="width: 800px; height: 300px;">  </script>

div代码(显示后台查询结果的 id=fileshow)
<td class="td-text" colspan="5">
<label id="lbInfoPath" for="InfoPath" style="color: blue; height: 100px; width: 100px;"> <%--添加附件--%>
<img alt="" src="../FrameWork/Images/tianjiafujian.png" />  <input style="position: absolute; right: 0; top: 0; font-size: 20px; opacity: 0; filter: alpha(opacity=0);" type="file" name ="InfoPath" id="InfoPath" onchange="ChangeFile();"/>  <input type="hidden" value="<%=pid%>" id="hidPid"/>  <input type="hidden" value="<%=CreateUser%>" id="hidCreatUsers"/> </label> <br /> <div id="fileshow" runat="server" style="border:1px solid ,red;width:800px;"></div> <br /> </td>

页面第加载,有f父ID,后台查询数据 这个时候显示在div中的内容是正确的
   /// 读取文件   public void BindFile(string pid)
{  StringBuilder strshow = new StringBuilder();
HR_OnlineBLL FileDal = new HR_OnlineBLL(); dt.Clear(); dt = FileDal.GetFile(pid);
strshow.Remove(0, strshow.Length);//清空strshow
strshow.Append("<table style='width:100% !important;'><thead><tr><th style='width: 10%;BACKGROUND: #eeeeee'>编号</th><th   style='width: 40%;BACKGROUND: #eeeeee'>文件</th><th style='width: 10%;BACKGROUND: #eeeeee'>类型 </th> <th style='width: 10%;BACKGROUND: #eeeeee'>操作 </th></tr> </thead>");
for (int i = 0; i < dt.Rows.Count; i++)
{ string ID = dt.Rows[i]["rowid"].ToString(); FileID = dt.Rows[i]["ID"].ToString();  string filename = dt.Rows[i]["filename"].ToString();  string AttackType = dt.Rows[i]["AttackType"].ToString();   strshow.Append(" <tr><td >" + ID + "</td><td>" + filename + "</td> <td>" + AttackType + "</td> <td>" ); strshow.Append("<input type='image' name='infopath' src='../framework/images/document-delete.png' style='height:20px; width:20px;' onclick='FileSelect(" + pid + "," + FileID + ", 0)'/> " + "</td></tr>");
}
strshow.Append(" </table>");  this.fileshow.InnerHtml = ""; this.fileshow.InnerHtml = strshow.ToString();
}

现在点击上传附件按钮,文件上传调用ashx里的代码
调用的js
function ChangeFile() {
if ($("#txtCRSTitle").val() == "") {  alert("请输入学习科目"); return;
}
var pid = $("input#hidPid").val(); var users = $("input#hidCreatUsers").val(); FileSelect(pid, 0, users);
}
//选择附件后显示附件名
function FileSelect(pid, FileID, CreateUser) {clickme(6);
$("#form1").ajaxSubmit({
type: 'post',
url: "/HandlerFile/UpdateFileHandler.ashx",
data: { "pid": pid, "FileID": FileID, "CreateUser": CreateUser },
dataType: "json",
async: false,
success: function (result) {
if (result.rkey) { $("div#fileshow").html(""); $("div#fileshow").html(result.rval); clickhide(); var file = $("#InfoPath") file.after(file.clone().val("")); file.remove(); } else {alert(result.rval); } } });
}

ashx里的代码

namespace ManageCom.HandlerFile
{public class UpdateFileHandler : IHttpHandler
{ string pid = ""; string FileID = ""; string CreateUser = ""; bool msg = false;   string fileName = "";//文件名称
string fex = "";  string FileType = "";string str = ""; bool result = false; StringBuilder strshow = new StringBuilder();
HttpFileCollection hfc = System.Web.HttpContext.Current.Request.Files; public static readonly string FileSize = System.Configuration.ConfigurationManager.ConnectionStrings["FileSize"].ConnectionString;
public static readonly string FilePath = System.Configuration.ConfigurationManager.ConnectionStrings["FilePath"].ConnectionString;
#region MyRegion public void ProcessRequest(HttpContext context)
{ try { pid = context.Request.Form["pid"]; FileID = context.Request.Form["FileID"];  CreateUser = context.Request.Form["CreateUser"];
if (CreateUser != "0" && CreateUser != null) //CreateUser!= "0"/执行添加文件操作
{ result = Filevalidation(hfc); if (result) {  if (AddFile(pid))
{ BindFile(pid); msg = true; str = "{\"rkey\":\"" + msg + "\",\"rval\":\"" + strshow.ToString() + "\"}"; }
else
{  msg = false; str = "{\"rkey\":\"" + msg + "\",\"rval\":\"上传失败\"}";
} } else
{ msg = false;
str = "{\"rkey\":\"" + msg + "\",\"rval\":\"上传失败\"}"; }
} else//执行删除操作
{  var DelIsTrue = DelFileByid(FileID);  msg = DelIsTrue == true ? DelIsTrue : false;
BindFile(pid);  msg = true;  str = "{\"rkey\":\"" + msg + "\",\"rval\":\"" + strshow.ToString() + "\"}";
} context.Response.Write(str);
} catch (Exception ex)
{  str = "{\"rkey\":\"false\",\"rval\":\"上传异常,请联系系统管理员\"}"; context.Response.Write(ex.ToString());
}
}
#endregion
public bool Filevalidation(HttpFileCollection hfc)
{
fileName = hfc[0].FileName;
fex = Path.GetExtension(fileName);
if (fileName == "" || fileName == null)
{ return false;
}
else if (hfc[0].ContentLength > Convert.ToInt32(FileSize))
{
return false; }
else if (fex != ".FLV" && fex.ToUpper() != ".AVI" && fex.ToUpper() != ".MOV" && fex.ToUpper() != ".MP4" &&
fex.ToUpper() != ".PDF" && fex.ToUpper() != ".XLS" && fex.ToUpper() != ".XLSX" && fex.ToUpper() != ".DOC" && fex.ToUpper() != ".DOCX" && fex.ToUpper() != ".PPT" && fex.ToUpper() != ".GIF" && fex.ToUpper() != ".JPG" && fex.ToUpper() != ".JPEG" && fex.ToUpper() != ".BMP" && fex.ToUpper() != ".PNG" && fex.ToUpper() != ".TXT")
{
return false;
}
return true;
}
public bool AddFile(string spid)
{
string Path = "../OnlineLearningFile/";
//FileType '0':图片,'1':文件,'2':视频
if (fex == ".FLV" || fex.ToUpper() == ".AVI" || fex.ToUpper() == ".MOV" || fex.ToUpper() == ".MP4")
{
FileType = "2";
Path = "../OnlineLearningFile/video/";
}
else if (fex.ToUpper() == ".PDF" || fex.ToUpper() == ".XLS" || fex.ToUpper() == ".XLSX" || fex.ToUpper() == ".DOC" || fex.ToUpper() == ".DOCX" || fex.ToUpper() == ".PPT" || fex.ToUpper() == ".PPTX" || fex.ToUpper() == ".TXT")
{
FileType = "1";
Path = "../OnlineLearningFile/document/";
}
else if (fex.ToUpper() == ".GIF" || fex.ToUpper() == ".JPG" || fex.ToUpper() == ".JPEG" || fex.ToUpper() == ".BMP" || fex.ToUpper() == ".PNG")
{
FileType = "0";
Path = "../OnlineLearningFile/images/";
}
fileName = Path + hfc[0].FileName;
string NewName = pid + "_" + System.DateTime.Now.ToString("yyyyMMddHHmmssfff") + fex;//
string DBSavepath = Path + NewName;
string PhysicalPath = System.Web.HttpContext.Current.Server.MapPath(Path + NewName);
hfc[0].SaveAs(PhysicalPath);
//保存到数据库中
result = new HR_OnlineBLL().AddFile(spid, FileType, hfc[0].FileName, DBSavepath, fex, CreateUser);
return result;
}
public StringBuilder BindFile(string spid)
{
HR_OnlineBLL FileDal = new HR_OnlineBLL();
DataTable dt = FileDal.GetFile(spid);
strshow.Remove(0, strshow.Length);
strshow.Append("<table style='width:100% !important;'><thead><tr><th style='width: 10%;BACKGROUND: #eeeeee'>编号</th><th   style='width: 40%;BACKGROUND: #eeeeee'>文件</th><th style='width: 10%;BACKGROUND: #eeeeee'>类型 </th> <th style='width: 10%;BACKGROUND: #eeeeee'>操作 </th></tr> </thead>");
for (int i = 0; i < dt.Rows.Count; i++)
{
string ID = dt.Rows[i]["rowid"].ToString();
FileID = dt.Rows[i]["ID"].ToString();
string filename = dt.Rows[i]["filename"].ToString();
string AttackType = dt.Rows[i]["AttackType"].ToString();
strshow.Append(" <tr><td >" + ID + "</td><td>" + filename + "</td> <td>" + AttackType + "</td> <td>");
strshow.Append("<input type='image' name='infopath' src='../framework/images/document-delete.png' style='height:20px; width:20px;' onclick='fileselect(" + pid + "," + FileID + ", 0)'/> " + "</td></tr>");
}
strshow.Append(" </table>");
return strshow;
}
public bool DelFileByid(string sFileID)
{
result = new HR_OnlineBLL().DelFile(sFileID);
return result;
} 

添加文件,用的是achx里的AddFile方法,添加后调用BindFile方法,返回json给前台,删除文件,调用DelFileByid方法,删除后调用BindFile方法,返回json给前台,两次返回的数据都是正确的,添加后给div赋值显示页面的数据正常,删除后给div赋值,页面会显示正确一次立刻变数据,这些数据是之前div随机的数据,跟数据库有的数据是不匹配的 ,所以现在导致删除文件功能异常,请大神们指教啊 现在只有40分了,有分了在追加,因为字数有限,把部分代码格式合并了
...全文
425 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 版主 2016-05-31
  • 打赏
  • 举报
回复
因为你是aspx,你看看,有没有 再次进入 load事件。加一个 ispostback看看
範先森 2016-05-31
  • 打赏
  • 举报
回复
删除事件的时候会出错?而且是开始显示对的,之后会变更一次,就出错了?那你看看删除之后走的流程,是不是在pageload中有什么事件,还是删除之后执行了哪个JS

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧